From 8f81c1f0b85ecc54dfd86499c4c13fccf8c534b4 Mon Sep 17 00:00:00 2001 From: Toni Bergholm Date: Thu, 22 Oct 2026 13:10:29 +0300 Subject: [PATCH 01/23] docs: P38 sc-forge design spec and ADR-0058 (Proposed) --- ROADMAP.md | 12 +- ...058-sc-forge-gitea-compatible-git-forge.md | 116 +++++++ docs/adr/README.md | 1 + .../specs/2026-10-22-p38-forge-design.md | 317 ++++++++++++++++++ 4 files changed, 444 insertions(+), 2 deletions(-) create mode 100644 docs/adr/0058-sc-forge-gitea-compatible-git-forge.md create mode 100644 docs/superpowers/specs/2026-10-22-p38-forge-design.md diff --git a/ROADMAP.md b/ROADMAP.md index 6824092b..387a452c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -696,8 +696,16 @@ across every phase. ## Active -No phase is in flight. Follow-up work is tracked as GitHub issues and listed -under Deferred below. +**P38 — sc-forge** (Proposed, [ADR-0058](docs/adr/0058-sc-forge-gitea-compatible-git-forge.md)): +a Gitea-compatible Git forge (bare repos over smart HTTP, a recorded subset of +`/api/v1`, SQLite metadata) so a platform can swap its project Git host by +config. Design: +`docs/superpowers/specs/2026-10-22-p38-forge-design.md`. Slices F0 (contract +capture) through F6 (acceptance on the first deployment). Hosted repos are bare +Git and get none of the `.sc/` features. + +Other follow-up work is tracked as GitHub issues and listed under Deferred +below. ## Completed phases (usability-first ordering) diff --git a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md new file mode 100644 index 00000000..43dca6d2 --- /dev/null +++ b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md @@ -0,0 +1,116 @@ +# ADR-0058: sc-forge, a Gitea-compatible Git forge + +- **Status:** Proposed +- **Date:** 2026-10-22 +- **Phase:** 38 +- **Builds on:** ADR-0028 (hosted Git through system `git`), ADR-0040 (bearer + tokens, hashed at rest), ADR-0041 (listener limits), ADR-0042 (TLS stays in + `tlsio`) +- **Spec:** `docs/superpowers/specs/2026-10-22-p38-forge-design.md` + +## Context + +A platform that uses Gitea as its project Git host wants to stop operating Gitea. +Its clients are programs: an agent runtime that opens, gates and merges pull +requests, and a portal that provisions repos, users and tokens and proxies Git +traffic. A survey of both found a much smaller surface than Gitea's: about 40 +REST routes, Git smart HTTP, and two admin CLI commands that bootstrap scripts +shell into the container for. No client uses SSH, webhooks, Actions from the +host, issues, wiki, LFS or a web UI. + +src-control already ships hosted-Git bridging, bearer tokens and listener +limits, but no forge. It does not host Git repos for others, and +`docs/THREAT-MODEL.md` names the first hosted deployment as a revisit trigger. + +## Decision + +1. **Hosted repos are bare Git.** The forge serves them with spawned + `git upload-pack` and `git receive-pack` (`--stateless-rpc`). `gix` has no + server side, and the P18 bridge already depends on system `git`. The `.sc/` + alternative is rejected for now: P9 export fails closed on encrypted content + and private branches are refused at the Git bridge, so `.sc/` repos behind a + Git face would carry the cost of both models without delivering either's + guarantees. Consequence, stated plainly: **hosted Project repos get none of + src-control's committed secrets, per-file encryption or private branches.** + Revisit when an sc-native transport exists for the agent runtime. +2. **The API is a Gitea-compatible subset, not a new API.** Clients then switch + by base URL and token. The contract is recorded from real Gitea 1.22.6 and + 1.26.2 by a scenario harness (`crates/forge/conformance/`) rather than taken + from the clients' hand-written transcripts, several of which are marked + authored, not recorded. Where a client depends on a Gitea quirk (error + texts, status codes, merge outcome strings), the forge reproduces it. +3. **Scope is what clients call.** No Actions, webhooks, issues, wiki, LFS, + OAuth apps or UI. Commit statuses are posted by the client's own runner; + branch protection supports `enable_push` and `status_check_contexts` only. + No SSH in v1 (follow-on: OpenSSH `AuthorizedKeysCommand`). No squash or + rebase merge: every client sends `Do: merge` and no UI exists for a human to + choose; other values answer 422. Same-repo pull requests only. +4. **New top-level adapter `crates/forge` (package `scl-forge`, binary + `sc-forge`).** It does not link `scl-repo`. `gix` stays in `gitio` and is not + used; rustls stays in `tlsio` and TLS is deferred (known deployments + terminate at a proxy). `CLAUDE.md`'s dependency rule is amended in the first + code PR. +5. **Metadata is SQLite on the data disk** (`rusqlite`, bundled, WAL, numbered + migrations): PR lists, latest-status-per-context and collaborator joins are + relational and need transactions. One writer process; the disk snapshot is + the backup, as with Gitea today. +6. **Runtime is `hyper` + `tokio`, confined to `scl-forge`.** Both are already + in the lockfile through `objio`. Hand-rolling HTTP parsing for streamed pack + bodies and 40 routes was rejected. `sc serve --http`'s thread-per-connection + server is unchanged. +7. **Merge is synchronous and server-side, in the bare repo, by plumbing:** + `git merge-tree --write-tree` plus `commit-tree` with two parents, then a + compare-and-swap `update-ref`, under a per-repo lock. The `head_commit_id` + guard compares against the live head tip. This gives clients a real merge + commit (the ancestry rule of their landing check) and makes `merged: true` + visible on the next read. Minimum `git` 2.40. +8. **Token format and storage.** Tokens are 40 hex characters (the length + Gitea issues), stored as BLAKE3 hashes, compared in constant time, with + optional expiry and scopes (`all`, `read|write:{repository,user, + organization,admin,issue}`). Basic auth with a password is accepted on the + token-management routes only; git and the API accept a token as the Basic + password under any username. Repo access is site admin, org owner, repo + owner or a collaborator grant; organization membership alone grants nothing. +9. **Bootstrap parity.** `sc-forge admin user create|change-password| + generate-access-token` accept Gitea's flags (`--admin`, + `--must-change-password=false`, `--scopes`, `--raw`) so existing bootstrap + scripts change a binary name, not their logic. + +## Consequences + +- src-control grows a network service that accepts untrusted writers. The + multi-tenant threat-model pass (token scopes, repo ACL, argument injection + into `git`, resource abuse, hook confinement) is a gate on F2 merging, and + the deferred signed-ref-attestation gap is documented, not closed. +- The crate is pre-1.0 and unaudited. Hosting customer repositories is an + operator decision made against that fact. +- A new SQLite dependency enters the workspace; `hyper` and `tokio` become + direct dependencies of one crate. +- Compatibility is a moving target. The recorded fixtures are pinned in the + repo and `check` runs in CI, so drift shows as a failing test, not a client + incident. Gitea behaviours the clients do not exercise are not promised. +- Recording from two Gitea versions will expose differences; the forge follows + the older pinned version unless a client requires the newer. +- Phase F6 is an acceptance run against the first deployment's own end-to-end + flows. It is src-control's exit gate but cannot run from this repository's CI; + the fixtures and `check` are the regression suite. + +## Rejected alternatives + +- **`.sc/` repos behind a Git bridge:** see decision 1. +- **Keep running Gitea:** the operating cost and its Actions, UI and SSH surface + are the problem; the used surface is small. +- **A new REST API with a Portal provider from day one:** the clients are + already written against Gitea; compatibility is the cheap way to ship, and a + native provider can follow once the forge exists. +- **In-process SSH server (`russh`):** large dependency for a transport nobody + uses. +- **Re-implementing upload-pack and receive-pack:** `gix` has no server side; + the pack negotiation and `--stateless-rpc` behaviour are exactly what system + `git` already provides. + +## Open + +Foreign-token status codes and merge message texts come from the recorded +fixtures. Whether `has_actions` PATCH is accepted or refused, the `/version` +string, and an eventual TLS option are decided during F1 and F5. diff --git a/docs/adr/README.md b/docs/adr/README.md index c346529a..1c2b57c7 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -68,6 +68,7 @@ supersedes the old one and update the **Status** line of the superseded record. | [0055](0055-blob-size-clone-filter.md) | Blob-size clone filter (`--filter blob:limit=`) | Accepted (built) | 27 | | [0056](0056-named-concurrent-ws-sessions.md) | Named and concurrent `sc ws` sessions and `sc ws refresh` | Accepted (built, including `sc ws refresh`) | 20 | | [0057](0057-bucket-compaction.md) | Bucket remote compaction and gc (`sc remote compact`) | Accepted | 36 | +| [0058](0058-sc-forge-gitea-compatible-git-forge.md) | sc-forge: a Gitea-compatible Git forge (bare Git, recorded API subset) | Proposed | 38 | See [`ROADMAP.md`](../../ROADMAP.md) for the phase sequence. ADR numbers are assigned in creation order, so 0017 — the secret scanner — sequences as phase P5, diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md new file mode 100644 index 00000000..5956a994 --- /dev/null +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -0,0 +1,317 @@ +# Design: sc-forge, a Gitea-compatible Git forge (P38) + +- **Date:** 2026-10-22 +- **Status:** Draft, pre-implementation (ADR-0058 is Proposed) +- **ADR to write at build time:** firm ADR-0058 from Proposed to Accepted when F2 ships +- **Contract source:** `crates/forge/conformance/` (recorded from real Gitea 1.22.6 + and 1.26.2; see "Conformance") and the client survey summarized below + +## Goal + +A self-hostable Git forge that a platform can swap in for Gitea by changing a +base URL and a token. It serves bare Git repositories over smart HTTP and the +subset of Gitea's `/api/v1` that two real clients use: an agent runtime that +opens, gates and merges pull requests, and a portal that provisions repos, +users and tokens and brokers Git traffic. + +Success is behavioural: the same clients, unmodified, pass their own end-to-end +flows against `sc-forge`. Wire compatibility is the means, not the product. + +## Non-goals (and why) + +- **A web UI.** The clients are programs. Humans use their own Git tooling and + the portal. +- **Actions/CI, webhooks, issues, wiki, packages, LFS, OAuth apps.** No client + calls them. Commit statuses are posted by the client's own suite runner; + protection can require named status contexts. +- **SSH transport (v1).** No client uses it: the portal's URL policy forbids + `ssh://` and the agent runtime authenticates over HTTP only. Follow-on: + OpenSSH with `AuthorizedKeysCommand` calling `sc-forge`, not an in-process SSH + server. `user/keys` is cut with it. +- **Squash and rebase merge, forks.** Every merge request seen sends + `Do: "merge"`; there is no UI where a human picks a style. `Do` values other + than `merge` answer 422 until a client needs them. Pull requests are same + repository only. +- **Required approvals in branch protection.** Clients read reviews and decide + client-side; nothing reads server-side approval rules. Protection supports + `enable_push` and `status_check_contexts` only. +- **High availability.** One writer process, one data disk, snapshot backup. +- **Storing `.sc/` repos.** Hosted repos are bare Git (ADR-0058, decision 1). + They get none of secrets, per-file encryption or private branches. +- **Changing Gitea's behaviour for the better.** Where a client matches on a + Gitea quirk (error text, status codes, "try again later"), `sc-forge` + reproduces it. Improvements are made after the clients are migrated. + +## What the clients need + +Tiers decide build order. Each row is a route plus the response keys a client +actually reads; full keys, status codes and message texts live in the recorded +fixtures, not here. + +**Tier 1, the default delivery path** +- `GET /api/v1/version`, `GET /api/healthz` (container health). +- `GET /api/v1/user`; `GET /api/v1/users/{u}`. +- `POST /api/v1/admin/users`, `PATCH /api/v1/admin/users/{u}` (password reset, + visibility); duplicate create answers 422. +- `POST /api/v1/orgs`, `GET /api/v1/orgs/{o}`, + `GET /api/v1/users/{u}/orgs/{o}/permissions` (`can_create_repository`). +- `POST|GET|DELETE /api/v1/users/{u}/tokens` under HTTP Basic (password): the + mint response carries `sha1`; list carries `id`, `name`, `token_last_eight`. + The admin token is not accepted on these routes. +- `POST /api/v1/orgs/{o}/repos` (`name`, `description`, `private`, + `default_branch`, `auto_init`, `readme`); duplicate answers 409 or 422 with + "already exists". +- `GET|PATCH|DELETE /api/v1/repos/{o}/{r}`; keys read: `full_name`, `name`, + `empty`, `private`, `description`, `default_branch`, `permissions`. +- `PUT|DELETE /api/v1/repos/{o}/{r}/collaborators/{u}` (204). +- `GET /api/v1/repos/{o}/{r}/branches/{b}` (`commit.id`). +- Git smart HTTP at `/{o}/{r}.git` (see "Git transport"). + +**Tier 2, pull requests and gating** +- `POST|GET /pulls`, `GET|PATCH /pulls/{n}`; the full PR object comes back from + create (`number`, `state`, `merged`, `merge_commit_sha`, `changed_files`, + `mergeable`, `head.{ref,sha,repo.full_name}`, `base.{ref,sha,repo.full_name}`, + `html_url`). `GET /pulls?state=all&head=…&limit=50` must work; clients filter + by `head.ref` themselves because stock Gitea ignores `head`. +- `POST /pulls/{n}/merge` with `{"Do":"merge","head_commit_id":…}`. +- `GET|POST /pulls/{n}/reviews`, `GET /pulls/{n}/reviews/{id}/comments`, + `GET /issues/{n}/comments`. +- `POST /statuses/{sha}`; `GET /commits/{sha}/status` (combined) and + `GET /statuses/{sha}` (history). + +**Tier 3, content reads (import and portal)** +- `GET /repos/search`, `GET /branches`, `GET /git/refs/heads[/{b}]` (an array), + `GET /commits` (`X-Total-Count`, paging), `GET /git/commits/{sha}` (+`.diff`), + `GET /git/trees/{sha}?recursive=true`, `GET|POST|PUT /contents/{path}`, + `GET /archive/{ref}.zip`. + +**Tier 4, protection** +- `POST|GET|PATCH|DELETE /branch_protections` with `branch_name`, + `enable_push`, `enable_status_check`, `status_check_contexts`; a merge that + lacks a required context is refused with a message containing + "required status checks". + +**Client behaviours that are part of the contract** +- Auth is `Authorization: token T`. Git uses HTTP Basic with the token as the + password under any username, including `oauth2`. A client re-resolves its token + once on 401 and replays, including POST. +- A foreign token on a private repo must answer what Gitea answers (the + fixtures decide 401 versus 404); one flow asserts it. +- Merge outcomes are classified by case-insensitive substring of the body: + "conflict" with 405 or 409, "try again later" with 405 (with + `changed_files == 0` meaning nothing to merge). A 2xx merge answer is not + trusted; the client re-reads the PR for `merged` and `merge_commit_sha`. +- A PR is "landed" if its frozen head is an ancestor of trunk, or the merge + commit has one parent and the tree comparison matches (squash). A real merge + commit satisfies the first rule. +- Combined status must list only the latest status per context; clients do not + deduplicate. `X-Total-Count` must equal the listed count. +- `GET /commits` on an empty repo answers 409. +- Git needs `uploadpack.allowReachableSHA1InWant`, `uploadpack.allowFilter`, + shallow fetch, `Git-Protocol: version=2`, and + `push --force-with-lease=refs/heads/b:` semantics. +- Bootstrap shells into the container: `admin user create --admin + --must-change-password=false`, `admin user change-password`, and + `admin user generate-access-token --scopes all --raw`. `sc-forge` accepts the + same subcommands and flags so those scripts need only a binary name change. + +## Architecture + +### Crate and dependency rule + +New top-level adapter `crates/forge` (package `scl-forge`, binary `sc-forge`). +It is a sibling of `cli` and `desktop`, not a consumer of `repo`: hosted repos +are plain Git, so `scl-repo` is not linked. Dependencies: `scl-core` only if a +helper is shared (BLAKE3 token hashing, `atomic_write_durable`); `scl-tlsio` is +linked only when TLS is added (deferred). **`gix` stays quarantined in +`gitio`; the forge does not use it.** All Git access is the system `git` +binary, spawned with argument arrays (never a shell), as the P18 bridge already +does. `CLAUDE.md`'s dependency rule gains one sentence in the F1 PR. + +New direct dependencies, each named here so review sees them: + +| Dependency | Why | +|---|---| +| `hyper` 1.x + `hyper-util` + `tokio` (multi-thread rt, net, process, io-util) | Routes with JSON, queries and streamed pack bodies; `hyper` and `tokio` are already in the lockfile through `objio`'s S3 SDK. Confined to `scl-forge`. | +| `rusqlite` (`bundled`) | Metadata. Relational queries (PR lists, status latest-per-context, collaborator joins), transactions and migrations; flat files would reimplement a database badly. First SQLite use in the workspace. | +| a password hash (`argon2`) | Basic-auth password verification for token routes. | + +### Storage layout (`--data-dir`) + +``` +/forge.db SQLite, WAL, one writer connection + readers +/repos//.git bare repositories (lower-cased canonical names) +/hooks/ hook shims, selected with -c core.hooksPath +/tmp/ scratch for index files and archives +``` + +The data disk is the unit of backup (disk snapshot), as with Gitea. No secret +lives outside it. + +### Metadata (SQLite) + +`users` (login, lower_login, kind user|org, email, password hash, is_admin, +visibility), `org_members` (org, user, owner|member), `tokens` (user, name, +BLAKE3 hash of the raw token, last_eight, scopes, expires_at, created_at), +`repos` (owner, name, lower_name, private, description, default_branch), +`collaborators` (repo, user, read|write|admin), `pulls` (repo, number, +head_ref, base_ref, title, body, state, merged, merge_commit_sha, head_sha at +merge, changed_files, timestamps), `reviews`, `comments`, `commit_statuses` +(repo, sha, context, state, description, target_url, created), `branch_protections` +(repo, branch, enable_push, status_check_contexts JSON). Per-repo `index` +counter for PR and comment numbers. Schema migrations are numbered SQL applied +at startup under a version table; a newer schema than the binary refuses to +start. + +### Auth and authorization + +- Tokens are 40 hex characters (the length Gitea issues; clients treat them as + opaque). Stored as BLAKE3 hashes, compared in constant time, optional expiry. + The token-store primitives follow ADR-0040's (`sct-` format excepted); + `serve_tokens.rs` is single-repo and file-backed, so only the ideas carry over. +- Accepted credentials: `Authorization: token T`, `Bearer T`, Basic with the + token as password (any username), and Basic with a user's password on the + token routes only. Password attempts are rate-limited per login. +- Scopes: `all`, `read|write:{repository,user,organization,admin,issue}`; + `public-only` is accepted and ignored (all repos are private by + configuration). Every route declares the scope category and level it needs. +- Repository access = site admin, org owner, repo owner, or a collaborator + grant (read < write < admin). Org membership alone grants nothing + (`FORCE_PRIVATE` semantics). A token is intersected with its user's access. + There are no teams. +- Authorization failures answer what the recorded Gitea answers (401, 403 or 404 + per route), not a uniform choice. + +### Git transport + +Routes: `GET /{o}/{r}.git/info/refs?service=git-upload-pack|git-receive-pack`, +`POST /{o}/{r}.git/git-upload-pack`, `POST /{o}/{r}.git/git-receive-pack`. + +- The server authenticates and authorizes first (read for upload-pack, write for + receive-pack), then spawns `git upload-pack --stateless-rpc` or + `git receive-pack --stateless-rpc` directly, no CGI. Request body streams to + stdin and stdout streams back. `Git-Protocol` maps to `GIT_PROTOCOL` when it + matches `version=[0-9]+(:…)?`. +- Spawn flags: `-c uploadpack.allowFilter=true -c + uploadpack.allowReachableSHA1InWant=true -c receive.fsckObjects=true -c + receive.maxInputSize= -c core.hooksPath=/hooks`. Hooks are never + read from a repository, so a pushed `hooks/` cannot run. +- Unauthenticated access to a private repo answers 401 with + `WWW-Authenticate: Basic`, so git prompts and retries. +- A `pre-receive` shim (`sc-forge hook pre-receive`, environment carries repo and + user ids) enforces branch protection (`enable_push: false` rejects any update + to the branch from receive-pack) and refuses deleting the default branch. The + merge path does not go through receive-pack, so protection does not block + server-side merges. +- A per-repository write lock serializes ref updates made by the server itself + (merges, content commits). Pushes rely on Git's own ref locking. + +### Server-side Git operations + +All plumbing, no working tree, all against the bare repo. Minimum `git` 2.40 +(`merge-tree --write-tree`), shared with the clients' own requirement. + +- **Reads:** `for-each-ref`, `rev-parse`, `log` and `rev-list` with a fixed + format, `cat-file`, `ls-tree -r`, `diff-tree`/`diff`, `archive --format=zip`. +- **Contents write:** temp `GIT_INDEX_FILE` (`read-tree`, `update-index + --cacheinfo`, `write-tree`), `commit-tree`, then `update-ref ` + as a compare-and-swap. A stale `sha` in a PUT fails like Gitea. +- **Merge (`Do: merge`):** under the repo lock, re-read base and head tips; + refuse if `head_commit_id` is present and differs from the head tip; run + `git merge-tree --write-tree base head`; on conflict answer as Gitea does; on a + head that is an ancestor of base answer Gitea's "nothing to merge" form; else + `commit-tree -p base -p head` with a Gitea-style message and the merging user + as author and committer, then `update-ref base new old`. The answer is + synchronous: the PR reads `merged: true` as soon as the call returns, so the + clients' re-read always sees the transition. +- **Mergeability** (`mergeable` on the PR object) is computed on read with + `merge-tree`, not cached. +- **Argument hygiene:** ref names and repo names validated by allowlist before + use; every spawned command separates options from operands with `--`; owner and + repo path components come from database lookups, never from the URL string. + +### HTTP surface rules + +- JSON errors in Gitea's shape `{"message": "...", "url": "/api/swagger"}` + with the status and message texts the fixtures pin. +- Pagination: `page` and `limit` (cap 50, default 30), `X-Total-Count`, and a + `Link` header where Gitea sends one. Routes Gitea does not paginate do not + paginate here. +- Request limits: JSON body cap, a header cap, a git request cap + (`--max-pack-size`, reusing ADR-0041's vocabulary), an idle timeout, a global + connection cap, and a per-git-process wall-clock limit. +- `GET /api/v1/version` answers a Gitea-compatible version string plus a + `sc-forge` build suffix; clients only use the route as a health probe. + +### CLI + +``` +sc-forge serve --data-dir DIR --listen ADDR --public-url URL [limits…] +sc-forge admin user create --username U --password P --email E [--admin] [--must-change-password=false] +sc-forge admin user change-password --username U --password P [--must-change-password=false] +sc-forge admin user generate-access-token --username U [--token-name N] [--scopes S,…] [--raw] +sc-forge admin org create --name O --owner U +sc-forge hook pre-receive # internal +``` + +`admin` operates on the data dir directly (SQLite locking makes it safe while +`serve` runs); it needs no network. + +## Phases + +| # | Slice | Done when | +|---|---|---| +| F0 | Contract | Recorder harness plus fixtures from Gitea 1.22.6 and 1.26.2 (`crates/forge/conformance/`), this spec, ADR-0058 Proposed, reviewed. | +| F1 | Skeleton, auth, bootstrap CLI | `serve` boots; migrations; users, orgs, tokens (Basic mint/list/delete), scopes, `/version`, `/healthz`, `/user`, `/users/{u}`, admin user create/patch, permissions; `admin …` CLI parity. Tier-1 non-repo fixtures pass `check`. | +| F2 | Repos and Git transport | Repo create/get/patch/search/delete, collaborators, `branches/{b}`, smart HTTP with ACL and pre-receive hook. Real `git` clone, push, fetch-by-sha, partial clone, shallow, `--force-with-lease`; 401 and foreign-token behaviour match fixtures. The multi-tenant threat-model pass is done before this merges. | +| F3 | Content API | Branches, refs, commits, git commits/trees/diff, contents GET/POST/PUT, archive zip. | +| F4 | PRs, statuses, merge, protection | Pulls, reviews, comments, merge (stale-head guard, conflict, empty, protection refusals), statuses with latest-per-context, branch protection. | +| F5 | Ops | Container image (git 2.40+, no sshd), limits, structured logs, `--data-dir` backup note, optional TLS decision. | +| F6 | Conformance on the first deployment | The consumers' own end-to-end flows run with only the Project Git host swapped. src-control's exit gate. | + +## Conformance + +`crates/forge/conformance/run.py` has two modes. `record` drives real Gitea +through scenarios and writes normalized fixtures (status, selected headers, +body, placeholders for shas, timestamps, ids and hosts). `check` replays the same +scenarios against any server and compares: status exactly, recorded headers, +every recorded JSON key present with the same JSON type (extra keys allowed), +and message texts by the distinctive substrings the scenario lists. + +The recorded fixtures are the contract. Where fixtures from the two Gitea +versions differ, the spec names the version `sc-forge` follows (the older +pinned compose version, 1.22.6, unless a client needs the newer behaviour). +Fixtures replace the clients' hand-authored transcripts, several of which are +labelled "authored, not recorded". F6 is the acceptance run, not the regression +suite: CI runs `check` plus end-to-end tests that drive `sc-forge` with real +`git`. + +## Threat model (to complete before F2 merges) + +Hosting other people's repositories is the first time this project accepts +untrusted writers over a network, which `docs/THREAT-MODEL.md` names as a +revisit trigger for signed ref attestation. The F2 gate covers: + +- Token handling: hashing, constant-time compare, expiry, scope enforcement + matrix per route, per-login rate limit on passwords, token and password + redaction in logs. +- Tenant isolation: repo path derivation, ref and path validation, argument + injection into `git`, symlink and `..` handling in contents and archive. +- Resource abuse: pack size, object count, decompression, concurrent processes, + slow clients, giant trees. +- Hook confinement: `core.hooksPath` pinned, no repo-supplied hooks, no + `core.fsmonitor`/`core.sshCommand`/`protocol` config reachable from a pushed + repo. +- Ref rollback and force pushes: the existing deferred gittuf-style signed ref + attestation is out of scope here; v1 documents the gap. +- Data integrity: SQLite and repo directory consistency after a crash (repo + create and delete are two-phase with a startup reconciler). + +## Open questions + +1. Foreign-token status (401 or 404) and the exact merge texts are decided by the + recorded fixtures, not here. +2. TLS: all known deployments terminate at a proxy or private network. Add + `tlsio` only if a deployment needs it; it needs a sync-to-hyper adapter. +3. Which Gitea version string `/version` reports. +4. Whether `has_actions` PATCH is accepted and ignored or refused. From a4517dd12add09bda2b1915c9c078eb4257d84fe Mon Sep 17 00:00:00 2001 From: Toni Bergholm Date: Thu, 22 Oct 2026 13:20:09 +0300 Subject: [PATCH 02/23] docs: P38 spec revision 2 (design review: crypto quarantine, http-backend, merge journal, protection policy) --- ...058-sc-forge-gitea-compatible-git-forge.md | 60 +- .../specs/2026-10-22-p38-forge-design.md | 560 +++++++++++------- 2 files changed, 385 insertions(+), 235 deletions(-) diff --git a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md index 43dca6d2..5233d0a3 100644 --- a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md +++ b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md @@ -24,9 +24,12 @@ limits, but no forge. It does not host Git repos for others, and ## Decision -1. **Hosted repos are bare Git.** The forge serves them with spawned - `git upload-pack` and `git receive-pack` (`--stateless-rpc`). `gix` has no - server side, and the P18 bridge already depends on system `git`. The `.sc/` +1. **Hosted repos are bare Git.** The forge serves them by running + `git http-backend` as a CGI per request, after its own authentication and + authorization (write access sets `REMOTE_USER`, without which receive-pack + answers 403). `gix` has no server side, and the P18 bridge already depends on + system `git`. Using `http-backend` keeps the advertisement framing, content + types, gzip request handling and protocol v2 in Git's hands. The `.sc/` alternative is rejected for now: P9 export fails closed on encrypted content and private branches are refused at the Git bridge, so `.sc/` repos behind a Git face would carry the cost of both models without delivering either's @@ -46,24 +49,47 @@ limits, but no forge. It does not host Git repos for others, and rebase merge: every client sends `Do: merge` and no UI exists for a human to choose; other values answer 422. Same-repo pull requests only. 4. **New top-level adapter `crates/forge` (package `scl-forge`, binary - `sc-forge`).** It does not link `scl-repo`. `gix` stays in `gitio` and is not - used; rustls stays in `tlsio` and TLS is deferred (known deployments - terminate at a proxy). `CLAUDE.md`'s dependency rule is amended in the first - code PR. + `sc-forge`) linking `{crypto, core}` only.** It does not link `scl-repo`, + `vfs` or `gitio`. Password hashing (`argon2`), token generation and the + constant-time compare are added to `crates/crypto` so RustCrypto stays + quarantined there. `gix` is not used; rustls stays in `tlsio` and TLS is + deferred (known deployments terminate at a proxy). `CLAUDE.md`'s dependency + rule gains `forge → {crypto, core}` in the first code PR. The crate is + unix-only behind a stub `main`. 5. **Metadata is SQLite on the data disk** (`rusqlite`, bundled, WAL, numbered migrations): PR lists, latest-status-per-context and collaborator joins are relational and need transactions. One writer process; the disk snapshot is the backup, as with Gitea today. -6. **Runtime is `hyper` + `tokio`, confined to `scl-forge`.** Both are already - in the lockfile through `objio`. Hand-rolling HTTP parsing for streamed pack - bodies and 40 routes was rejected. `sc serve --http`'s thread-per-connection +6. **Runtime is a `hyper` (HTTP/1) server on a multi-thread `tokio` runtime, + confined to `scl-forge`.** Both crates are already in the lockfile through + `objio`'s S3 SDK (which uses only tokio's `rt`); this adds the server and the + multi-thread runtime to one crate. Hand-rolling HTTP parsing for streamed + pack bodies and 40 routes was rejected. `sc serve --http`'s thread-per-connection server is unchanged. -7. **Merge is synchronous and server-side, in the bare repo, by plumbing:** - `git merge-tree --write-tree` plus `commit-tree` with two parents, then a - compare-and-swap `update-ref`, under a per-repo lock. The `head_commit_id` - guard compares against the live head tip. This gives clients a real merge - commit (the ancestry rule of their landing check) and makes `merged: true` - visible on the next read. Minimum `git` 2.40. +7. **Merge is synchronous and server-side, in the bare repo, by plumbing, on + captured object ids.** Required status contexts are checked against the head + id, `git merge-tree --write-tree` (exit code 1 means conflict) and + `commit-tree` build a two-parent merge commit, and one `update-ref --stdin` + transaction with `verify ` and `update ` + publishes it, so "the head I checked is the head I merged" is atomic. A + `merge_intents` journal row written before the ref update makes the + Git/SQLite gap recoverable: startup and retries finalize or abort from the ref + state. The merge is the only path allowed onto a protected branch. This gives + clients a real merge commit (the ancestry rule of their landing check) and + `merged: true` on the next read. +7a. **Protection is one policy for every mutation path.** Receive-pack + (pre-receive), contents writes and merges share one function; client pushes + are limited to `refs/heads/*` and `refs/tags/*` (so `refs/replace/*` and + server refs cannot be written), every Git spawn runs with + `GIT_NO_REPLACE_OBJECTS=1`, a scrubbed environment and a pinned + `core.hooksPath`, and the server keeps `refs/forge/pull//head` so + unmerged PR commits survive branch deletion and gc. +7b. **Credentials are strictly separated by route.** Token routes accept a + user's password only (never a token) and only for that user; every other + route accepts a token only (a Basic password is never tried as a password). + Scopes cannot be raised by a token; `public-only` is rejected at issuance. + Repo identity on disk is an immutable id, so delete-and-recreate cannot alias + a running process. 8. **Token format and storage.** Tokens are 40 hex characters (the length Gitea issues), stored as BLAKE3 hashes, compared in constant time, with optional expiry and scopes (`all`, `read|write:{repository,user, @@ -91,6 +117,8 @@ limits, but no forge. It does not host Git repos for others, and incident. Gitea behaviours the clients do not exercise are not promised. - Recording from two Gitea versions will expose differences; the forge follows the older pinned version unless a client requires the newer. +- The threat-model pass runs twice: with F2 (authentication, tenancy, transport, + resources) and with F4 (server-side writes, merge races, contents bypass). - Phase F6 is an acceptance run against the first deployment's own end-to-end flows. It is src-control's exit gate but cannot run from this repository's CI; the fixtures and `check` are the regression suite. diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 5956a994..6e7fb5ba 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -1,10 +1,11 @@ # Design: sc-forge, a Gitea-compatible Git forge (P38) -- **Date:** 2026-10-22 +- **Date:** 2026-10-22 (revision 2, after independent design review) - **Status:** Draft, pre-implementation (ADR-0058 is Proposed) -- **ADR to write at build time:** firm ADR-0058 from Proposed to Accepted when F2 ships -- **Contract source:** `crates/forge/conformance/` (recorded from real Gitea 1.22.6 - and 1.26.2; see "Conformance") and the client survey summarized below +- **ADR:** ADR-0058 is firmed from Proposed to Accepted when the phase is built + (ROADMAP "How a phase gets built") +- **Contract source:** `crates/forge/conformance/` (recorded from real Gitea + 1.22.6 and 1.26.2; see "Conformance") plus the client survey summarized below ## Goal @@ -19,299 +20,420 @@ flows against `sc-forge`. Wire compatibility is the means, not the product. ## Non-goals (and why) -- **A web UI.** The clients are programs. Humans use their own Git tooling and - the portal. +- **A web UI.** The clients are programs. - **Actions/CI, webhooks, issues, wiki, packages, LFS, OAuth apps.** No client calls them. Commit statuses are posted by the client's own suite runner; protection can require named status contexts. -- **SSH transport (v1).** No client uses it: the portal's URL policy forbids - `ssh://` and the agent runtime authenticates over HTTP only. Follow-on: - OpenSSH with `AuthorizedKeysCommand` calling `sc-forge`, not an in-process SSH - server. `user/keys` is cut with it. -- **Squash and rebase merge, forks.** Every merge request seen sends - `Do: "merge"`; there is no UI where a human picks a style. `Do` values other - than `merge` answer 422 until a client needs them. Pull requests are same - repository only. -- **Required approvals in branch protection.** Clients read reviews and decide - client-side; nothing reads server-side approval rules. Protection supports - `enable_push` and `status_check_contexts` only. -- **High availability.** One writer process, one data disk, snapshot backup. +- **SSH transport (v1).** No client uses it. Follow-on: OpenSSH with + `AuthorizedKeysCommand`, not an in-process SSH server. `user/keys` goes with it. +- **Squash and rebase merge, forks, repo/user rename.** Every merge request seen + sends `Do: "merge"`; other values answer 422. Pull requests are same + repository only. Rename answers 422. +- **Required approvals in branch protection.** Clients decide on reviews + client-side. +- **High availability.** One writer process, one data volume. - **Storing `.sc/` repos.** Hosted repos are bare Git (ADR-0058, decision 1). - They get none of secrets, per-file encryption or private branches. - **Changing Gitea's behaviour for the better.** Where a client matches on a - Gitea quirk (error text, status codes, "try again later"), `sc-forge` - reproduces it. Improvements are made after the clients are migrated. + Gitea quirk (error text, status code), `sc-forge` reproduces it. The one + deliberate departure: merge is synchronous (see "Merge"). ## What the clients need -Tiers decide build order. Each row is a route plus the response keys a client -actually reads; full keys, status codes and message texts live in the recorded -fixtures, not here. +Tiers decide build order. Full keys, status codes and message texts live in the +recorded fixtures, not here. **Tier 1, the default delivery path** -- `GET /api/v1/version`, `GET /api/healthz` (container health). -- `GET /api/v1/user`; `GET /api/v1/users/{u}`. -- `POST /api/v1/admin/users`, `PATCH /api/v1/admin/users/{u}` (password reset, - visibility); duplicate create answers 422. +- `GET /api/v1/version`, `GET /api/healthz`; `GET /api/v1/user`; `GET /api/v1/users/{u}`. +- `POST /api/v1/admin/users`, `PATCH /api/v1/admin/users/{u}`; duplicate create 422. - `POST /api/v1/orgs`, `GET /api/v1/orgs/{o}`, `GET /api/v1/users/{u}/orgs/{o}/permissions` (`can_create_repository`). -- `POST|GET|DELETE /api/v1/users/{u}/tokens` under HTTP Basic (password): the - mint response carries `sha1`; list carries `id`, `name`, `token_last_eight`. - The admin token is not accepted on these routes. -- `POST /api/v1/orgs/{o}/repos` (`name`, `description`, `private`, - `default_branch`, `auto_init`, `readme`); duplicate answers 409 or 422 with - "already exists". -- `GET|PATCH|DELETE /api/v1/repos/{o}/{r}`; keys read: `full_name`, `name`, - `empty`, `private`, `description`, `default_branch`, `permissions`. +- `POST|GET|DELETE /api/v1/users/{u}/tokens` (password auth; mint returns `sha1`; + list returns `id`, `name`, `token_last_eight`). +- `POST /api/v1/orgs/{o}/repos`; duplicate 409 or 422 "already exists". +- `GET|PATCH|DELETE /api/v1/repos/{o}/{r}` (keys read: `full_name`, `name`, + `empty`, `private`, `description`, `default_branch`, `permissions`). - `PUT|DELETE /api/v1/repos/{o}/{r}/collaborators/{u}` (204). -- `GET /api/v1/repos/{o}/{r}/branches/{b}` (`commit.id`). -- Git smart HTTP at `/{o}/{r}.git` (see "Git transport"). +- `GET /repos/{o}/{r}/branches/{b}` (`commit.id`). +- Git smart HTTP at `/{o}/{r}.git`. **Tier 2, pull requests and gating** -- `POST|GET /pulls`, `GET|PATCH /pulls/{n}`; the full PR object comes back from - create (`number`, `state`, `merged`, `merge_commit_sha`, `changed_files`, - `mergeable`, `head.{ref,sha,repo.full_name}`, `base.{ref,sha,repo.full_name}`, - `html_url`). `GET /pulls?state=all&head=…&limit=50` must work; clients filter - by `head.ref` themselves because stock Gitea ignores `head`. +- `POST|GET /pulls`, `GET|PATCH /pulls/{n}` (full PR object from create: + `number`, `state`, `merged`, `merge_commit_sha`, `changed_files`, `mergeable`, + `head.{ref,sha,repo.full_name}`, `base.{ref,sha,repo.full_name}`, `html_url`); + `GET /pulls?state=all&head=…&limit=50` must work, and clients filter by + `head.ref` because stock Gitea ignores `head`. - `POST /pulls/{n}/merge` with `{"Do":"merge","head_commit_id":…}`. - `GET|POST /pulls/{n}/reviews`, `GET /pulls/{n}/reviews/{id}/comments`, `GET /issues/{n}/comments`. - `POST /statuses/{sha}`; `GET /commits/{sha}/status` (combined) and - `GET /statuses/{sha}` (history). + `GET /statuses/{sha}`. -**Tier 3, content reads (import and portal)** -- `GET /repos/search`, `GET /branches`, `GET /git/refs/heads[/{b}]` (an array), - `GET /commits` (`X-Total-Count`, paging), `GET /git/commits/{sha}` (+`.diff`), - `GET /git/trees/{sha}?recursive=true`, `GET|POST|PUT /contents/{path}`, +**Tier 3, content reads and writes** +- `GET /repos/search`, `/branches`, `/git/refs/heads[/{b}]` (an array), + `/commits` (`X-Total-Count`, paging), `/git/commits/{sha}` (+`.diff`), + `/git/trees/{sha}?recursive=true`, `GET|POST|PUT /contents/{path}`, `GET /archive/{ref}.zip`. **Tier 4, protection** -- `POST|GET|PATCH|DELETE /branch_protections` with `branch_name`, - `enable_push`, `enable_status_check`, `status_check_contexts`; a merge that - lacks a required context is refused with a message containing - "required status checks". +- `POST|GET|PATCH|DELETE /branch_protections` (`branch_name`, `enable_push`, + `enable_status_check`, `status_check_contexts`). **Client behaviours that are part of the contract** -- Auth is `Authorization: token T`. Git uses HTTP Basic with the token as the - password under any username, including `oauth2`. A client re-resolves its token - once on 401 and replays, including POST. -- A foreign token on a private repo must answer what Gitea answers (the - fixtures decide 401 versus 404); one flow asserts it. -- Merge outcomes are classified by case-insensitive substring of the body: - "conflict" with 405 or 409, "try again later" with 405 (with - `changed_files == 0` meaning nothing to merge). A 2xx merge answer is not - trusted; the client re-reads the PR for `merged` and `merge_commit_sha`. +- Auth is `Authorization: token T`; git uses Basic with the token as password + under any username (including `oauth2`). Clients re-resolve their token once + on 401 and replay, including POST. +- A foreign token on a private repo answers what Gitea answers (one flow asserts + 401). Where no client asserts otherwise and Gitea leaks existence, `sc-forge` + does not (see "Existence"). +- Merge outcomes are classified by case-insensitive substring: "conflict" with + 405 or 409; "try again later" with 405, with `changed_files == 0` meaning + nothing to merge; a protection refusal contains "required status checks". A 2xx + merge answer is not trusted; clients re-read the PR for `merged` and + `merge_commit_sha`. - A PR is "landed" if its frozen head is an ancestor of trunk, or the merge - commit has one parent and the tree comparison matches (squash). A real merge - commit satisfies the first rule. -- Combined status must list only the latest status per context; clients do not - deduplicate. `X-Total-Count` must equal the listed count. + commit has one parent and a tree comparison matches. A real merge commit + satisfies the first rule. +- Combined status lists only the latest status per context; clients do not + deduplicate. `X-Total-Count` equals the listed count. - `GET /commits` on an empty repo answers 409. -- Git needs `uploadpack.allowReachableSHA1InWant`, `uploadpack.allowFilter`, - shallow fetch, `Git-Protocol: version=2`, and - `push --force-with-lease=refs/heads/b:` semantics. -- Bootstrap shells into the container: `admin user create --admin +- Git needs reachable-SHA fetch, `blob:none` filters, shallow fetch, + `Git-Protocol: version=2`, and `push --force-with-lease=refs/heads/b:`. +- Bootstrap scripts shell into the container for `admin user create --admin --must-change-password=false`, `admin user change-password`, and - `admin user generate-access-token --scopes all --raw`. `sc-forge` accepts the - same subcommands and flags so those scripts need only a binary name change. + `admin user generate-access-token --scopes all --raw`; `sc-forge` accepts the + same subcommands and flags. ## Architecture ### Crate and dependency rule -New top-level adapter `crates/forge` (package `scl-forge`, binary `sc-forge`). -It is a sibling of `cli` and `desktop`, not a consumer of `repo`: hosted repos -are plain Git, so `scl-repo` is not linked. Dependencies: `scl-core` only if a -helper is shared (BLAKE3 token hashing, `atomic_write_durable`); `scl-tlsio` is -linked only when TLS is added (deferred). **`gix` stays quarantined in -`gitio`; the forge does not use it.** All Git access is the system `git` -binary, spawned with argument arrays (never a shell), as the P18 bridge already -does. `CLAUDE.md`'s dependency rule gains one sentence in the F1 PR. +New top-level adapter `crates/forge` (package `scl-forge`, binary `sc-forge`), +sibling of `cli` and `desktop`. It links `{crypto, core}` and never `repo`, +`vfs` or `gitio`: hosted repos are plain Git. **Password hashing (`argon2`), +token generation, and the constant-time compare move into `crates/crypto`** +(RustCrypto stays quarantined there; the existing `random_hex` is the RNG +entry point). `gix` is not used. rustls stays in `tlsio` and TLS is deferred. +`CLAUDE.md`'s dependency rule gains one sentence in the F1 PR: +`forge → {crypto, core}`. The crate is `#![cfg(unix)]` with a stub `main` so the +Windows workspace check still compiles. -New direct dependencies, each named here so review sees them: +New direct dependencies: | Dependency | Why | |---|---| -| `hyper` 1.x + `hyper-util` + `tokio` (multi-thread rt, net, process, io-util) | Routes with JSON, queries and streamed pack bodies; `hyper` and `tokio` are already in the lockfile through `objio`'s S3 SDK. Confined to `scl-forge`. | -| `rusqlite` (`bundled`) | Metadata. Relational queries (PR lists, status latest-per-context, collaborator joins), transactions and migrations; flat files would reimplement a database badly. First SQLite use in the workspace. | -| a password hash (`argon2`) | Basic-auth password verification for token routes. | +| `hyper` 1.x (`http1` only) + `hyper-util` + `tokio` (multi-thread rt, net, process, io-util, signal) | HTTP server and process supervision. `hyper` and `tokio` are already in the lockfile through `objio`; this crate adds the server and multi-thread runtime, nothing in `core`/`repo`. | +| `rusqlite` (`bundled`) | Metadata. Relational queries (PR lists, latest status per context, joins), transactions, migrations; flat files would reimplement a database. First SQLite and first C-compiled dependency in the workspace; the SBOM job must list it. | +| `argon2` (in `crates/crypto`) | Password verification on token routes. | + +No `deny.toml` exists; `audit.yml` and the SBOM job are the gates. CI adds a +conformance job (Python 3 stdlib) and a `git` version check. ### Storage layout (`--data-dir`) ``` -/forge.db SQLite, WAL, one writer connection + readers -/repos//.git bare repositories (lower-cased canonical names) -/hooks/ hook shims, selected with -c core.hooksPath -/tmp/ scratch for index files and archives +/forge.db SQLite, WAL, synchronous=FULL +/repos/.git bare repositories, named by immutable repo id +/hooks/ hook shims (selected per spawn) +/trash/.git repos pending final deletion +/tmp/ scratch (index files, archives, pinned HOME) ``` -The data disk is the unit of backup (disk snapshot), as with Gitea. No secret -lives outside it. +Repositories are addressed by immutable numeric id, never by owner/name; the +database maps names to ids. Deleting and recreating `acme/alpha` yields a new id +and a new directory, so a lingering process cannot see the replacement. ### Metadata (SQLite) -`users` (login, lower_login, kind user|org, email, password hash, is_admin, -visibility), `org_members` (org, user, owner|member), `tokens` (user, name, -BLAKE3 hash of the raw token, last_eight, scopes, expires_at, created_at), -`repos` (owner, name, lower_name, private, description, default_branch), -`collaborators` (repo, user, read|write|admin), `pulls` (repo, number, -head_ref, base_ref, title, body, state, merged, merge_commit_sha, head_sha at -merge, changed_files, timestamps), `reviews`, `comments`, `commit_statuses` -(repo, sha, context, state, description, target_url, created), `branch_protections` -(repo, branch, enable_push, status_check_contexts JSON). Per-repo `index` -counter for PR and comment numbers. Schema migrations are numbered SQL applied -at startup under a version table; a newer schema than the binary refuses to -start. - -### Auth and authorization +`users` (login, lower_login UNIQUE, kind user|org, email, password hash, +is_admin, visibility), `org_members`, `tokens` (user, name, BLAKE3 hash, +last_eight, scopes, expires_at), `repos` (id, owner, name, lower_name UNIQUE per +owner, private, description, default_branch, state live|deleting), +`collaborators`, `pulls` (repo, number, head_ref, base_ref, title, body, state, +merged, merge_commit_sha, `head_sha_at_merge`, `changed_files_at_merge`, +timestamps), `merge_intents`, `reviews`, `comments`, `commit_statuses` (repo, +sha, context, state, description, target_url, id AUTOINCREMENT), +`branch_protections` (repo, branch, enable_push, enable_status_check, +status_check_contexts JSON), `mergeability_cache` (repo, base_sha, head_sha → +mergeable, changed_files), a per-repo index counter. Numbered SQL migrations run +at `serve` startup only; `admin` commands refuse when the schema differs from +their binary's, and `serve` never caches users or tokens across requests. + +### Authentication - Tokens are 40 hex characters (the length Gitea issues; clients treat them as - opaque). Stored as BLAKE3 hashes, compared in constant time, optional expiry. - The token-store primitives follow ADR-0040's (`sct-` format excepted); - `serve_tokens.rs` is single-repo and file-backed, so only the ideas carry over. -- Accepted credentials: `Authorization: token T`, `Bearer T`, Basic with the - token as password (any username), and Basic with a user's password on the - token routes only. Password attempts are rate-limited per login. -- Scopes: `all`, `read|write:{repository,user,organization,admin,issue}`; - `public-only` is accepted and ignored (all repos are private by - configuration). Every route declares the scope category and level it needs. -- Repository access = site admin, org owner, repo owner, or a collaborator - grant (read < write < admin). Org membership alone grants nothing - (`FORCE_PRIVATE` semantics). A token is intersected with its user's access. - There are no teams. -- Authorization failures answer what the recorded Gitea answers (401, 403 or 404 - per route), not a uniform choice. + opaque), stored as BLAKE3 hashes, compared in constant time, optional expiry. + The primitives follow ADR-0040's; `serve_tokens.rs` is file-backed and + single-repo, so only the design carries over. +- **Credential rules per route class, enforced by the router table:** + +| Route class | Accepted credential | Additional rule | +|---|---|---| +| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. | Authenticated user must equal `{u}`. | +| `admin/*` | Token with `write:admin` (or `read:admin` for GETs), user must be site admin. | | +| Everything else | `token T`, `Bearer T`, or Basic with a **token** as password (any username). A Basic password is never tried as a user password. | Scope and actor rules below. | + + The router table is the single source of authorization: every route + declares its class, required scope category and level, and an actor/target + rule. A route without a declaration does not compile; a test enumerates the + table against the fixture routes. +- **Scopes:** `all`, `read|write:{repository,user,organization,admin,issue}`. + `public-only` is rejected at issuance (422), since every repo is private. +- **Actor rules:** a token acts as its user and is intersected with the user's + access. Organization-scoped writes (`write:organization`, repo creation in an + org) require the user to be an owner of that org or a site admin; a user can + mint and delete only their own tokens; nested ids (review, comment) are + checked against the repo in the path before use. +- **Repository access** = site admin, org owner, repo owner, or collaborator + grant (read < write < admin). Org membership alone grants nothing. No teams. + `POST /pulls/{n}/merge` requires write. +- **Existence.** Anonymous and foreign callers get the same response for a + nonexistent repo and an unauthorized private repo wherever no client asserts a + difference (the fixtures include both cases for the API and for git); + `repos/search` and every listing filter by the caller's access. +- **`private: false`** on create or PATCH is accepted, stored as true and + returned as true (`FORCE_PRIVATE`). There is no anonymous read. +- **Rate limits and bind gate.** Password attempts back off exponentially per + login and are capped per source (not a lockout; a service account must not be + lockable by a stranger); argon2 runs under a global concurrency cap. The + server refuses a non-loopback bind unless `--behind-proxy` or + `--allow-plaintext` is given, and trusts a forwarded-for header only when + `--trusted-proxy-header` names it. ### Git transport -Routes: `GET /{o}/{r}.git/info/refs?service=git-upload-pack|git-receive-pack`, -`POST /{o}/{r}.git/git-upload-pack`, `POST /{o}/{r}.git/git-receive-pack`. - -- The server authenticates and authorizes first (read for upload-pack, write for - receive-pack), then spawns `git upload-pack --stateless-rpc` or - `git receive-pack --stateless-rpc` directly, no CGI. Request body streams to - stdin and stdout streams back. `Git-Protocol` maps to `GIT_PROTOCOL` when it - matches `version=[0-9]+(:…)?`. -- Spawn flags: `-c uploadpack.allowFilter=true -c - uploadpack.allowReachableSHA1InWant=true -c receive.fsckObjects=true -c - receive.maxInputSize= -c core.hooksPath=/hooks`. Hooks are never - read from a repository, so a pushed `hooks/` cannot run. -- Unauthenticated access to a private repo answers 401 with - `WWW-Authenticate: Basic`, so git prompts and retries. -- A `pre-receive` shim (`sc-forge hook pre-receive`, environment carries repo and - user ids) enforces branch protection (`enable_push: false` rejects any update - to the branch from receive-pack) and refuses deleting the default branch. The - merge path does not go through receive-pack, so protection does not block - server-side merges. -- A per-repository write lock serializes ref updates made by the server itself - (merges, content commits). Pushes rely on Git's own ref locking. +Routes: `GET /{o}/{r}.git/info/refs?service=…`, `POST …/git-upload-pack`, +`POST …/git-receive-pack`. The server authenticates and authorizes (read for +upload-pack, write for receive-pack), resolves the repo id from the database, and +runs **`git http-backend`** as a CGI with `GIT_PROJECT_ROOT=/repos/.git` +and `PATH_INFO` set to the service suffix. This keeps Git's own advertisement +preamble, content types, no-cache headers, `Content-Encoding: gzip` request +handling and protocol v2 correct without re-implementation (verified: git 2.54 +serves an advertisement from a bare repo with the root set to the repo itself, +and answers 403 for receive-pack unless `REMOTE_USER` is set, which the server +sets only after the write check). The CGI response is parsed up to its blank +line (`Status:` and headers), then the body is streamed. + +- **Subprocess environment** is built from scratch for every Git spawn + (`env_clear`): fixed `PATH`, `HOME=/tmp/home`, `GIT_CONFIG_NOSYSTEM=1`, + `GIT_CONFIG_GLOBAL=/dev/null`, `GIT_NO_REPLACE_OBJECTS=1`, `GIT_ATTR_NOSYSTEM=1`, + `GIT_TERMINAL_PROMPT=0`, and per-spawn config through `GIT_CONFIG_COUNT`: + `core.hooksPath=/hooks` (on **every** spawn, including `update-ref`, + which runs `reference-transaction`), `uploadpack.allowFilter=true`, + `uploadpack.allowReachableSHA1InWant=true`, `uploadpackfilter.allow=false` with + an explicit allow for `blob:none` only, `receive.fsckObjects=true`, + `receive.maxInputSize`, `receive.autogc=false`, `gc.auto=0`, + `core.useReplaceRefs=false`. Only the `pre-receive` and `post-receive` hook + shims exist; the hook child receives only `FORGE_REPO_ID`, `FORGE_USER_ID`, + `FORGE_GENERATION`, `FORGE_DB` and git's quarantine variables. +- **Ref namespace policy** (pre-receive): client pushes may write `refs/heads/*` + and `refs/tags/*` only. `refs/replace/*`, `refs/forge/*`, `refs/pull/*`, + `refs/notes/*` and anything else are refused. `refs/forge/` is hidden from + advertisement (`uploadpack.hideRefs`). +- **Branch protection applies to every mutation path, one policy function** + shared by pre-receive, contents writes and merges: a protected branch refuses + direct updates from receive-pack and contents writes when `enable_push` is + false, refuses non-fast-forward and deletion always, and permits only the + server-side merge path (which has its own checks). The default branch is not + protected unless a rule says so (Gitea behaviour). Deleting the default branch + is refused. +- **Policy linearization:** authorization and protection are evaluated once when + a request starts (the hook re-reads protection at ref-update time under one + read transaction). A revocation or a new rule affects requests that start after + it commits; an in-flight push is not cancelled. Documented, not coordinated. +- **PR retention:** the server keeps `refs/forge/pull//head` for every PR, + set at creation and refreshed by `post-receive` when the head branch moves, + and the pre-receive hook records the head into that ref before allowing a + deletion of a head branch. With `gc.auto=0`, no unreachable PR commit is + pruned; maintenance gc (F5) runs with a long `--prune` window under the repo + lock. +- **Admission control** before any git process: global and per-repo limits on + concurrent git children, per-process wall-clock timeout, per-process + `RLIMIT_CPU`/`RLIMIT_FSIZE`, a free-space reserve checked before accepting a + push, and a per-owner byte quota (default off). `receive.maxInputSize` bounds + the incoming pack only, so expansion is bounded by the quota and the disk + reserve; the container applies cgroup memory and PID limits. +- **Process ownership:** each child runs in its own process group; cancellation, + client disconnect, timeout and shutdown kill the group and reap it; stderr is + drained concurrently with a size cap. `serve` handles SIGTERM by refusing new + work, draining for a bounded time, killing stragglers, then closing the + database. ### Server-side Git operations -All plumbing, no working tree, all against the bare repo. Minimum `git` 2.40 -(`merge-tree --write-tree`), shared with the clients' own requirement. - -- **Reads:** `for-each-ref`, `rev-parse`, `log` and `rev-list` with a fixed - format, `cat-file`, `ls-tree -r`, `diff-tree`/`diff`, `archive --format=zip`. -- **Contents write:** temp `GIT_INDEX_FILE` (`read-tree`, `update-index - --cacheinfo`, `write-tree`), `commit-tree`, then `update-ref ` - as a compare-and-swap. A stale `sha` in a PUT fails like Gitea. -- **Merge (`Do: merge`):** under the repo lock, re-read base and head tips; - refuse if `head_commit_id` is present and differs from the head tip; run - `git merge-tree --write-tree base head`; on conflict answer as Gitea does; on a - head that is an ancestor of base answer Gitea's "nothing to merge" form; else - `commit-tree -p base -p head` with a Gitea-style message and the merging user - as author and committer, then `update-ref base new old`. The answer is - synchronous: the PR reads `merged: true` as soon as the call returns, so the - clients' re-read always sees the transition. -- **Mergeability** (`mergeable` on the PR object) is computed on read with - `merge-tree`, not cached. -- **Argument hygiene:** ref names and repo names validated by allowlist before - use; every spawned command separates options from operands with `--`; owner and - repo path components come from database lookups, never from the URL string. +All plumbing against the bare repo, no working tree, same sanitized environment. +Minimum `git` 2.40 in tests; the container pins a current release +(`merge-tree --write-tree` needs 2.38 or newer). + +- **Argument hygiene.** Names are checked against an allowlist first. Every ref + or revision from a client is resolved once to a full object id with + `rev-parse --verify --end-of-options ^{commit}`; only ids reach + `merge-tree`, `commit-tree -p`, `update-ref`, `archive`, `diff-tree`. + `--end-of-options` precedes revisions; `--` precedes paths only, and paths are + treated as literals with NUL-delimited output (`-z`). Output is size-capped. +- **Reads:** `for-each-ref`, `rev-parse`, `log`/`rev-list` with a fixed `-z` + format, `cat-file`, `ls-tree -r -z`, `diff-tree`, `archive --format=zip`. +- **Contents write** (POST/PUT): validate the path (reject empty, `.`, `..`, + `.git` and its NTFS/HFS aliases, absolute paths; mode 100644 only), `hash-object + -w`, a temp `GIT_INDEX_FILE` (`read-tree`, `update-index --cacheinfo`, + `write-tree`), `commit-tree`, then `update-ref ` (zero old id + for an unborn branch). The branch must pass the protection policy first. A + lost CAS rebuilds from the new tip, revalidates the supplied blob `sha`, and + retries up to 3 times, then answers 409. Server-made commits bypass + `receive.fsckObjects`, so the path rules above are the check. +- **Per-repo write lock** serializes the server's own ref writes (contents, + merges, PR-ref updates). It does not exclude receive-pack; the guarantees below + come from Git's atomic ref transaction, not the lock. + +### Merge + +`POST /pulls/{n}/merge` with `Do: merge` (other values 422). The caller needs +write access. Steps, all on captured object ids: + +1. Resolve `base_oid` and `head_oid` once. If `head_commit_id` is present and + differs from `head_oid`, answer the recorded stale-head response. +2. If the PR is already merged or closed, answer the recorded response. If + `head_oid` is an ancestor of `base_oid`, answer Gitea's "nothing to merge" + form (405, "Please try again later", `changed_files` 0). +3. Required status check: if the base has a protection rule with + `enable_status_check`, every context in `status_check_contexts` must have a + latest status of `success` on **`head_oid`** (missing, pending, failure and + error refuse with the recorded 405 or 409 and the text "required status + checks"). No admin bypass in v1. +4. `git merge-tree --write-tree base_oid head_oid`: exit 0 is clean, exit 1 is a + conflict (answer the recorded conflict form), anything else is an internal + error. Never infer from output presence. +5. Insert a `merge_intents` row (PR, `base_oid`, `head_oid`, `merge_oid` computed + by `commit-tree -p base_oid -p head_oid`, state `pending`). +6. One `git update-ref --stdin` transaction: `start`, `verify refs/heads/ + `, `update refs/heads/ `, `prepare`, + `commit`. The `verify` makes "the head I checked is the head I merged" atomic + with the base update. If base moved, recompute once or twice (bounded), then + answer 405 "try again later"; if the head moved, answer the stale-head + response. +7. Mark the intent done and the PR merged (`merge_commit_sha`, + `head_sha_at_merge`, `changed_files_at_merge`) in one SQLite transaction; return + 200. After this the PR reads `merged: true` immediately. + +**Crash recovery.** Git and SQLite cannot commit together, so the intent row is +the journal. On startup and on any read or merge retry that finds a `pending` +intent: if the base ref equals `merge_oid`, finalize the PR as merged; if it +equals `base_oid`, mark the intent aborted; otherwise (base moved on) the merge +landed if `merge_oid` is an ancestor of the base, else aborted. A retried merge +request therefore recovers the original outcome instead of reporting "nothing to +merge". The merge commit message and identity follow Gitea's (`Merge pull +request '' (#<n>) from <head> into <base>`, the merging user). + +**Mergeability** (`mergeable`, and `changed_files` on open PRs) is computed with +`merge-tree` and cached by `(base_sha, head_sha)`, which are content-addressed so +the cache never goes stale. Closed and merged PRs never run it. List endpoints +use the cache and compute misses under a small concurrency limit. + +**PR head lifecycle.** An open PR's `head.sha` is the live branch tip (a +force-push shows immediately); a merged PR's `head.sha` is frozen at merge; a +closed PR keeps its last head through `refs/forge/pull/<n>/head`. Whether a +push of the head commit straight into base marks the PR merged, as Gitea does, is +decided from the recorded fixtures. + +### Statuses + +Any caller with write on the repo may post any context (Gitea's trust boundary: +the writer is trusted, status contexts are not attestations; stated here so it is +not mistaken for one). "Latest" per context is the highest insertion id. The +combined `state` and `X-Total-Count` follow the fixtures. + +### Repository lifecycle + +- **Create:** insert the row (`state=creating`), create the directory + (`git init --bare` with the sanitized environment, `HEAD` symbolic to + `refs/heads/<default_branch>`), optionally the initial commit (`auto_init`), + then mark live. A startup reconciler removes directories with no live row and + completes or removes `creating` rows. +- **Delete:** mark `deleting` (new work for that id is rejected), terminate the + repo's registered children, rename the directory into `trash/`, delete the row, + then remove the trash. Hooks verify `FORGE_GENERATION` against the database so + a straggler fails closed. +- **Default branch:** PATCH updates the row and bare `HEAD` together; the + reconciler repairs a mismatch. A repo is `empty` when `HEAD` does not resolve + (computed live). Names: lower-case uniqueness enforced by a database index; + reserved names (`api`, `admin`, `assets`, `user`, `login`, and the rest of + Gitea's list), leading `-` or `.`, a trailing `.git`, and anything outside + `[A-Za-z0-9._-]` are rejected. ### HTTP surface rules - JSON errors in Gitea's shape `{"message": "...", "url": "<base>/api/swagger"}` - with the status and message texts the fixtures pin. -- Pagination: `page` and `limit` (cap 50, default 30), `X-Total-Count`, and a - `Link` header where Gitea sends one. Routes Gitea does not paginate do not - paginate here. -- Request limits: JSON body cap, a header cap, a git request cap - (`--max-pack-size`, reusing ADR-0041's vocabulary), an idle timeout, a global - connection cap, and a per-git-process wall-clock limit. -- `GET /api/v1/version` answers a Gitea-compatible version string plus a - `sc-forge` build suffix; clients only use the route as a health probe. + with the recorded statuses and texts. +- Pagination: `page`, `limit` (cap 50), `X-Total-Count`, `Link` where Gitea + sends one; ordering is pinned per route from the fixtures. Routes Gitea does + not paginate do not paginate here. +- Limits: JSON body cap, header cap, idle timeout, global connection cap, git + request caps (inflated size included). +- `GET /api/v1/version` answers a Gitea-compatible version plus a `sc-forge` + suffix; clients use the route as a health probe. ### CLI ``` -sc-forge serve --data-dir DIR --listen ADDR --public-url URL [limits…] +sc-forge serve --data-dir DIR --listen ADDR --public-url URL [--behind-proxy|--allow-plaintext] [limits…] sc-forge admin user create --username U --password P --email E [--admin] [--must-change-password=false] sc-forge admin user change-password --username U --password P [--must-change-password=false] sc-forge admin user generate-access-token --username U [--token-name N] [--scopes S,…] [--raw] sc-forge admin org create --name O --owner U -sc-forge hook pre-receive # internal +sc-forge hook pre-receive|post-receive # internal ``` -`admin` operates on the data dir directly (SQLite locking makes it safe while -`serve` runs); it needs no network. +`admin` operates on the data directory directly and needs no network. + +### Backup and durability + +The supported backup is a crash-consistent volume snapshot. SQLite WAL and Git +ref updates both survive a crash, and the merge-intent journal plus the +reconcilers repair the only cross-store gap. Copying `forge.db` alone is not a +backup (it omits WAL contents). `synchronous=FULL` and Git's default fsync are +kept. A restore test (kill -9 loop during pushes and merges, then reconcile and +compare) ships with F4. ## Phases +Every slice ends with its conformance fixtures passing `check`, plus end-to-end +tests driving `sc-forge` with real `git`. + | # | Slice | Done when | |---|---|---| -| F0 | Contract | Recorder harness plus fixtures from Gitea 1.22.6 and 1.26.2 (`crates/forge/conformance/`), this spec, ADR-0058 Proposed, reviewed. | -| F1 | Skeleton, auth, bootstrap CLI | `serve` boots; migrations; users, orgs, tokens (Basic mint/list/delete), scopes, `/version`, `/healthz`, `/user`, `/users/{u}`, admin user create/patch, permissions; `admin …` CLI parity. Tier-1 non-repo fixtures pass `check`. | -| F2 | Repos and Git transport | Repo create/get/patch/search/delete, collaborators, `branches/{b}`, smart HTTP with ACL and pre-receive hook. Real `git` clone, push, fetch-by-sha, partial clone, shallow, `--force-with-lease`; 401 and foreign-token behaviour match fixtures. The multi-tenant threat-model pass is done before this merges. | -| F3 | Content API | Branches, refs, commits, git commits/trees/diff, contents GET/POST/PUT, archive zip. | -| F4 | PRs, statuses, merge, protection | Pulls, reviews, comments, merge (stale-head guard, conflict, empty, protection refusals), statuses with latest-per-context, branch protection. | -| F5 | Ops | Container image (git 2.40+, no sshd), limits, structured logs, `--data-dir` backup note, optional TLS decision. | -| F6 | Conformance on the first deployment | The consumers' own end-to-end flows run with only the Project Git host swapped. src-control's exit gate. | +| F0 | Contract | Recorder harness and fixtures from Gitea 1.22.6 and 1.26.2 merged, findings reconciled into this spec, ADR-0058 reviewed. | +| F1 | Skeleton, auth, bootstrap CLI | `serve` boots; migrations; router table with per-route policy; users, orgs, tokens, scopes, the credential-rule table with negative tests (token cannot mint tokens; Alice's password cannot mint Bob's); `/version`, `/healthz`, `/user`, admin users; `admin …` parity; crypto-crate additions. | +| F2 | Repos and Git transport | Repo create/get/patch/search/delete lifecycle with reconcilers, collaborators, `branches/{b}`, `http-backend` transport with ACL, environment scrub, ref-namespace policy, admission control, process groups. Real `git`: clone, push, fetch-by-sha, `blob:none`, shallow, `--force-with-lease`, gzip request bodies, replace-ref push refused. **Threat-model pass #1 (auth, tenancy, transport, resources) merges with this slice** as a `docs/THREAT-MODEL.md` section plus the tests it names. | +| F3 | Content API | Branches, refs, commits, git commits/trees/diff, contents GET/POST/PUT with the protection policy and path rules, archive zip. | +| F4 | PRs, statuses, merge, protection | Pulls, reviews, comments, statuses, protection, merge with intents and recovery, PR retention refs. **Threat-model pass #2 (server-side writes, merge races, contents bypass)**, kill -9 restore test, protection-bypass tests across receive-pack, contents and merge. | +| F5 | Ops | Container image (current git, no sshd), cgroup limits documented, structured logs without secrets, maintenance gc, SIGTERM drain test, free-space admission test, bind-gate tests. | +| F6 | Conformance on the first deployment | The consumers' own end-to-end flows run with only the Project Git host swapped. src-control's exit gate; not reproducible from this repo's CI. | ## Conformance `crates/forge/conformance/run.py` has two modes. `record` drives real Gitea -through scenarios and writes normalized fixtures (status, selected headers, -body, placeholders for shas, timestamps, ids and hosts). `check` replays the same -scenarios against any server and compares: status exactly, recorded headers, -every recorded JSON key present with the same JSON type (extra keys allowed), -and message texts by the distinctive substrings the scenario lists. - -The recorded fixtures are the contract. Where fixtures from the two Gitea -versions differ, the spec names the version `sc-forge` follows (the older -pinned compose version, 1.22.6, unless a client needs the newer behaviour). -Fixtures replace the clients' hand-authored transcripts, several of which are -labelled "authored, not recorded". F6 is the acceptance run, not the regression -suite: CI runs `check` plus end-to-end tests that drive `sc-forge` with real -`git`. - -## Threat model (to complete before F2 merges) - -Hosting other people's repositories is the first time this project accepts -untrusted writers over a network, which `docs/THREAT-MODEL.md` names as a -revisit trigger for signed ref attestation. The F2 gate covers: - -- Token handling: hashing, constant-time compare, expiry, scope enforcement - matrix per route, per-login rate limit on passwords, token and password - redaction in logs. -- Tenant isolation: repo path derivation, ref and path validation, argument - injection into `git`, symlink and `..` handling in contents and archive. -- Resource abuse: pack size, object count, decompression, concurrent processes, - slow clients, giant trees. -- Hook confinement: `core.hooksPath` pinned, no repo-supplied hooks, no - `core.fsmonitor`/`core.sshCommand`/`protocol` config reachable from a pushed - repo. -- Ref rollback and force pushes: the existing deferred gittuf-style signed ref - attestation is out of scope here; v1 documents the gap. -- Data integrity: SQLite and repo directory consistency after a crash (repo - create and delete are two-phase with a startup reconciler). +through scenarios and writes normalized fixtures; `check` replays them against +any server. Normalization keeps identity: shas and ids become stable +placeholders (`<sha#1>`, `<sha#2>`), so two different commits stay distinct and +`merged: true` cannot match `merged: false`. `check` compares status exactly, +recorded headers, and every recorded JSON value after normalization; only keys +marked volatile (timestamps, host-bearing URLs) are type-only. Scenarios may +carry state assertions (merged after merge, `head.sha` changes after a push). +Message texts are compared by the distinctive substrings the scenario lists. + +Where the two Gitea versions differ, the spec names the version `sc-forge` +follows: the older pinned one (1.22.6) unless a client needs the newer. The +fixtures replace the clients' hand-authored transcripts, several of which are +labelled authored, not recorded. CI runs `check` against the in-tree server on +every PR. ## Open questions -1. Foreign-token status (401 or 404) and the exact merge texts are decided by the - recorded fixtures, not here. +1. Foreign-token and nonexistent-repo statuses, merge refusal texts, the + manually-merged PR detection, and paging order come from the recorded + fixtures and are folded into this spec when F0 closes. 2. TLS: all known deployments terminate at a proxy or private network. Add - `tlsio` only if a deployment needs it; it needs a sync-to-hyper adapter. -3. Which Gitea version string `/version` reports. -4. Whether `has_actions` PATCH is accepted and ignored or refused. + `tlsio` only if one needs it (it needs a sync-to-hyper adapter). +3. Which Gitea version string `/version` reports; whether `has_actions` PATCH is + accepted and ignored or refused. +4. Signed ref attestation (the THREAT-MODEL's deferred gittuf-shaped item) is out + of scope; v1 documents the rollback gap. From b32f0312edc6c49c54af80ad728095a9eb8fbfb8 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 14:39:06 +0300 Subject: [PATCH 03/23] test(forge): Gitea conformance runner and fixtures recorded from 1.22.6 and 1.26.2 run.py records 22 scenarios (A to V) against a real Gitea and checks any server against the fixtures: values compared after normalization, placeholder identity per scenario, volatile keys by type only. gitea-up.sh and gitea-down.sh manage throwaway containers on random ports. --- crates/forge/conformance/README.md | 142 + .../conformance/fixtures/1.22.6/A-meta.json | 165 + .../fixtures/1.22.6/B-users-orgs-tokens.json | 849 + .../conformance/fixtures/1.22.6/C-repos.json | 2248 +++ .../fixtures/1.22.6/D-empty-repo.json | 288 + .../fixtures/1.22.6/E-history-reads.json | 2211 +++ .../conformance/fixtures/1.22.6/F-pulls.json | 4945 +++++ .../conformance/fixtures/1.22.6/G-merge.json | 4507 +++++ .../fixtures/1.22.6/H-statuses.json | 3076 +++ .../fixtures/1.22.6/I-branch-protection.json | 388 + .../fixtures/1.22.6/J-smart-http.json | 617 + .../fixtures/1.22.6/K-visibility-probing.json | 3796 ++++ .../fixtures/1.22.6/L-force-private.json | 1149 ++ .../conformance/fixtures/1.22.6/M-names.json | 2415 +++ .../fixtures/1.22.6/N-default-branch.json | 1237 ++ .../fixtures/1.22.6/O-pr-head-lifecycle.json | 3418 ++++ .../fixtures/1.22.6/P-pagination.json | 15519 +++++++++++++++ .../fixtures/1.22.6/Q-protection-bypass.json | 408 + .../fixtures/1.22.6/R-token-scope-edges.json | 530 + .../fixtures/1.22.6/S-ref-pushes.json | 508 + .../fixtures/1.22.6/T-merge-outcomes.json | 3953 ++++ .../fixtures/1.22.6/U-status-check-edges.json | 512 + .../fixtures/1.22.6/V-smart-http-bytes.json | 257 + .../conformance/fixtures/1.22.6/meta.json | 29 + .../conformance/fixtures/1.26.2/A-meta.json | 165 + .../fixtures/1.26.2/B-users-orgs-tokens.json | 867 + .../conformance/fixtures/1.26.2/C-repos.json | 2320 +++ .../fixtures/1.26.2/D-empty-repo.json | 302 + .../fixtures/1.26.2/E-history-reads.json | 2242 +++ .../conformance/fixtures/1.26.2/F-pulls.json | 5064 +++++ .../conformance/fixtures/1.26.2/G-merge.json | 4654 +++++ .../fixtures/1.26.2/H-statuses.json | 3298 ++++ .../fixtures/1.26.2/I-branch-protection.json | 423 + .../fixtures/1.26.2/J-smart-http.json | 615 + .../fixtures/1.26.2/K-visibility-probing.json | 3924 ++++ .../fixtures/1.26.2/L-force-private.json | 1189 ++ .../conformance/fixtures/1.26.2/M-names.json | 2400 +++ .../fixtures/1.26.2/N-default-branch.json | 1281 ++ .../fixtures/1.26.2/O-pr-head-lifecycle.json | 3532 ++++ .../fixtures/1.26.2/P-pagination.json | 15919 ++++++++++++++++ .../fixtures/1.26.2/Q-protection-bypass.json | 431 + .../fixtures/1.26.2/R-token-scope-edges.json | 549 + .../fixtures/1.26.2/S-ref-pushes.json | 518 + .../fixtures/1.26.2/T-merge-outcomes.json | 4086 ++++ .../fixtures/1.26.2/U-status-check-edges.json | 529 + .../fixtures/1.26.2/V-smart-http-bytes.json | 257 + .../conformance/fixtures/1.26.2/meta.json | 29 + crates/forge/conformance/gitea-down.sh | 9 + crates/forge/conformance/gitea-up.sh | 53 + crates/forge/conformance/run.py | 1763 ++ 50 files changed, 109586 insertions(+) create mode 100644 crates/forge/conformance/README.md create mode 100644 crates/forge/conformance/fixtures/1.22.6/A-meta.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/C-repos.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/E-history-reads.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/F-pulls.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/G-merge.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/H-statuses.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/J-smart-http.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/L-force-private.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/M-names.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/N-default-branch.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/P-pagination.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/meta.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/A-meta.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/C-repos.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/E-history-reads.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/F-pulls.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/G-merge.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/H-statuses.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/J-smart-http.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/L-force-private.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/M-names.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/N-default-branch.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/P-pagination.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/meta.json create mode 100755 crates/forge/conformance/gitea-down.sh create mode 100755 crates/forge/conformance/gitea-up.sh create mode 100644 crates/forge/conformance/run.py diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md new file mode 100644 index 00000000..71bb31e0 --- /dev/null +++ b/crates/forge/conformance/README.md @@ -0,0 +1,142 @@ +# sc-forge conformance contract + +A contract for the Gitea-compatible subset of `/api/v1` (plus git smart HTTP) that `sc-forge` +serves, **recorded from real Gitea** rather than written by hand. A scenario runner has three jobs: + +- `record` runs every scenario against a real Gitea and writes normalized fixtures. +- `check` runs the same scenarios against any server and compares the result with the fixtures. +- `diff` compares two fixture directories offline, for example `1.22.6` against `1.26.2`. + +`show` prints a readable digest of a fixture directory. Everything is Python 3 standard library plus +`git` and (for recording) Docker. Always run Python as `python3 -I`. + +## Record against real Gitea + +```sh +cd crates/forge/conformance +eval "$(./gitea-up.sh 1.22.6 rec)" # sets BASE_URL, ADMIN_TOKEN, CONTAINER +python3 -I run.py record --base-url "$BASE_URL" --admin-token "$ADMIN_TOKEN" --out fixtures/1.22.6/ +./gitea-down.sh "$CONTAINER" +``` + +`gitea-up.sh <version> <label>` starts a throwaway `gitea/gitea:<version>-rootless` container with +sqlite3, a random free host port and a random container name (`sc-forge-conf-<label>-<hex>`), and +prints `BASE_URL=... ADMIN_TOKEN=... CONTAINER=...`. The container runs with +`REQUIRE_SIGNIN_VIEW=true`, `DEFAULT_PRIVATE=private`, `FORCE_PRIVATE=true`, registration, SSH and +actions disabled, and `OFFLINE_MODE=true`. The admin user is `siteadmin` because Gitea reserves +`admin`. `gitea-down.sh` refuses any container whose name does not start with `sc-forge-conf-`. + +A full record run needs a **fresh** server: scenarios create `alice`, `bot`, `carol`, `dave`, the org +`acme` and repos such as `alpha` and `hist`. The images must already be pulled. + +## Check any server + +```sh +python3 -I run.py check --base-url http://127.0.0.1:3000 --admin-token "$TOKEN" --fixtures fixtures/1.26.2/ +python3 -I run.py check ... --only F,G -v # a subset, verbose +python3 -I run.py diff fixtures/1.22.6 fixtures/1.26.2 # offline version diff +python3 -I run.py show fixtures/1.26.2 --only G --body # what was recorded +``` + +`check` exits non-zero on any failure. Requirements on the server under test: a fresh instance whose +admin token has all scopes, the ability to create users through `POST /admin/users` and tokens +through `POST /users/{u}/tokens` with Basic auth, and git smart HTTP on the same base URL. + +### What is compared + +Each scenario is a fixed sequence of exchanges (HTTP calls, `git` commands, and recorded +observations called notes). Exchange N of the run is compared with exchange N of the fixture: + +- HTTP: method and normalized path, status (exact), the recorded response headers + (`content-type`, `x-total-count`, `link`, `www-authenticate`, `location`, plus any a call tracks), + and the body. +- JSON bodies: every recorded key must exist with the same type, extra keys are allowed, arrays must + have the same length, and every scalar is compared by **value** after normalization. Only volatile + values are compared by type: `message` and `errors` (text), every `url`/`*_url` key (they carry the + host), a repo `size`, and paths a call lists in `volatile=[...]`. +- `message` text is checked with `must_contain=[...]`: each word must appear, case-insensitively, + in the response message. +- Text bodies (diffs, patches) are compared exactly unless the call marks `volatile=["$text"]`. +- git commands: exit status (ok or not) and `must_contain` words in the combined output. +- Notes: recorded observations such as `merged_within_10s`. A note marked `strict=False` (timing) + only warns. + +### Normalization + +Fixtures never contain tokens, passwords, host names, ports or real hashes: + +| Real value | Placeholder | +| --- | --- | +| 40-hex object id | `<sha#N>` | +| numeric id (`id`, `*_id`, numeric path segment) | `<id:NAMESPACE#N>` | +| timestamp | `<ts>` | +| token, password | `<token>` | +| base URL / host:port / temp dir | `<base>` / `<host>` / `<tmp>` | +| the admin user name | `<admin>` | +| abbreviated hash ranges in git output | `<short>..<short>` | + +Numbers `N` count first appearances, so two different shas stay different and the same sha stays the +same. Shas and numeric path segments (`/pulls/3`) are numbered **per scenario**; ids inside a JSON body +are numbered **per exchange** (ids of different kinds collide numerically, so cross-exchange body-id +identity would be accidental). `check` does not require the same numbers, only the same pattern: it +keeps a one-to-one mapping between fixture placeholders and actual values and reports an identity +mismatch when that mapping breaks. Numbering is assigned in sorted-key order, so a server's JSON key +order does not matter. Nothing else is sorted: array order is part of the contract. + +## Scenarios + +| Id | Topic | +| --- | --- | +| A | version, healthz, bad and missing credentials | +| B | users, orgs, tokens, token scope enforcement | +| C | repo create/get/patch/search/delete, collaborators, pushes by permission | +| D | reads on an empty repo | +| E | reads on a repo with history, contents API writes, archives | +| F | pull requests: create, list, head tracking, close/reopen, reviews, comments | +| G | merge outcomes and styles, `head_commit_id`, required status checks | +| H | commit statuses: dedupe, combined state, state strings, bad shas | +| I | branch protection CRUD and push enforcement | +| J | git smart HTTP: credential variants, sha fetch, partial/shallow clone, force-with-lease, tags | +| K | anonymous and foreign-token probing of missing vs private repos | +| L | `private:false` under `FORCE_PRIVATE` | +| M | name rules: case, reserved names, rename | +| N | default branch changes and first-push behaviour of empty repos | +| O | PR head lifecycle: force-push, deleted branch, recreated branch, direct push into base | +| P | pagination: order, `limit`/`page` edge cases, `Link`, `X-Total-Count` | +| Q | protection bypass paths: contents API, PR merge, force push, deletion | +| R | token scope edges | +| S | which special refs a write collaborator may push | +| T | merge outcome table: unrelated history, identical tree, contained head, conflicts | +| U | status-check edge cases: other commit, warning/skipped/error, moved head | +| V | raw smart HTTP bytes and headers, gzip request body | + +## Add a scenario + +Add a function to `run.py` before the `__main__` guard: + +```python +@scenario("W", "my-topic") # id, file slug; base=False skips the shared setup +def sc_my_topic(c): + c.mk_repo("thing") # unrecorded setup: users, org, repo, collaborators + r = c.call("POST", "/repos/acme/thing/pulls", {...}, as_="bot-scoped", + expect=201, # assert, for setup only; no expect means "just record" + must_contain=["already exists"], # words the message must carry + volatile=["mergeable"]) # compare these paths by type only + c.note("merged_within_10s", bool(ok)) # record a derived fact; strict=False for timing + c.git(["push", url, "HEAD:refs/heads/x"], cwd=wc, name="push-x") # recorded git step +``` + +Helpers: `c.call(..., rec=False)` for setup; `c.push_branch(repo, branch, files, base=...)` for +commits via real git; `c.mk_token`, `c.mk_user`; `mkpr`, `wait_for`, `advance_main` for PR flows. +Principals are named: `admin`, `alice`, `bot`, `carol`, `dave` (all scopes), `bot-scoped` +(`read:user,read:organization,write:repository`), `alice-ro` (`read:repository`), `none`, `bad`, and +`<name>-tokbasic` (a token sent as a Basic password, as git does). + +Keep a scenario deterministic: no recorded call inside a data-dependent loop. Poll with unrecorded +calls and record the outcome as a note. Then record on both Gitea versions and review with `show` +and `diff` before relying on a new scenario. + +Timing facts the scenarios already work around: Gitea answers a merge with `405 "Please try again +later"` while a PR is being checked and, indefinitely, when it has conflicts (`retry_while` in +`call()` retries only the first case); several versions list rows created in the same second in +arbitrary order, so scenarios that compare list order sleep between creations. diff --git a/crates/forge/conformance/fixtures/1.22.6/A-meta.json b/crates/forge/conformance/fixtures/1.22.6/A-meta.json new file mode 100644 index 00000000..64958bcd --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/A-meta.json @@ -0,0 +1,165 @@ +{ + "scenario": "A", + "title": "meta", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/version", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "version": "1.22.6" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/version", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/healthz", + "auth": "none", + "status": 200, + "headers": { + "content-type": "application/json" + }, + "body": { + "status": "pass", + "description": "Gitea: Git with a cup of tea", + "checks": { + "cache:ping": [ + { + "status": "pass", + "time": "<ts>" + } + ], + "database:ping": [ + { + "status": "pass", + "time": "<ts>" + } + ] + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/probe", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/probe", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/missing", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json new file mode 100644 index 00000000..9b4f76e2 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json @@ -0,0 +1,849 @@ +{ + "scenario": "B", + "title": "users-orgs-tokens", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "alice", + "email": "alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "alice", + "email": "alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: alice]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "bot", + "email": "bot@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/admin/users/alice", + "auth": "admin", + "status": 200, + "request": { + "login_name": "alice", + "source_id": "<id:source_id#1>", + "password": "<token>", + "visibility": "private", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/nobody-here", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user redirect does not exist [name: nobody-here]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "not exist" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "acme", + "full_name": "Acme", + "visibility": "private" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "acme", + "full_name": "Acme", + "visibility": "private" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: acme]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/nobody-org", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "user redirect does not exist [name: nobody-org]" + ], + "message": "GetOrgByName", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/<admin>/orgs/acme/permissions", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "is_owner": true, + "is_admin": true, + "can_write": true, + "can_read": true, + "can_create_repository": true + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/orgs/acme/permissions", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "HasOrgOrUserVisible", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/carol/orgs/acme/permissions", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "is_owner": false, + "is_admin": false, + "can_write": false, + "can_read": true, + "can_create_repository": false + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "ci", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "tmp", + "scopes": [ + "read:repository", + "write:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "tmp", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:repository" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + }, + { + "id": "<id:id#2>", + "name": "tmp", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:repository" + ] + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/users/alice/tokens/<id:path:tokens#1>", + "auth": "alice-basic", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "ci", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "access token name has been used already", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "bot-basic", + "status": 201, + "request": { + "name": "scoped", + "scopes": [ + "read:user", + "read:organization", + "write:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "scoped", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:organization", + "write:repository", + "read:user" + ] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:organization]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped", + "auth": "alice-ro", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/alice/scoped/contents/new.txt", + "auth": "alice-ro", + "status": 403, + "request": { + "content": "aGk=", + "message": "m" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:repository]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/alice/scoped/contents/README.md", + "auth": "alice-ro", + "status": 403, + "request": { + "content": "aGk=", + "message": "m", + "sha": "<sha#1>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:repository]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/alice/scoped/collaborators/carol", + "auth": "alice-ro", + "status": 403, + "request": { + "permission": "write" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:repository]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/alice/scoped/statuses/<sha#2>", + "auth": "alice-ro", + "status": 403, + "request": { + "state": "success", + "context": "x" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:repository]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "HasOrgOrUserVisible", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/admin/users", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:admin]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "bot-scoped", + "status": 403, + "request": { + "name": "botrepo", + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/C-repos.json b/crates/forge/conformance/fixtures/1.22.6/C-repos.json new file mode 100644 index 00000000..bffa6d65 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/C-repos.json @@ -0,0 +1,2248 @@ +{ + "scenario": "C", + "title": "repos", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "alpha", + "auto_init": true, + "default_branch": "main", + "private": true, + "readme": "Default" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "alpha", + "auto_init": true, + "default_branch": "main", + "private": true, + "readme": "Default" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "empty", + "auto_init": false, + "private": true, + "default_branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/empty", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/missing", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "has_actions": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "description": "Alpha repo" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#3>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "name": "probe", + "full_name": "<admin>/probe", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/<admin>/probe/languages", + "html_url": "<base>/<admin>/probe", + "url": "<base>/api/v1/repos/<admin>/probe", + "link": "", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "clone_url": "<base>/<admin>/probe.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=alp&limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/bot", + "auth": "admin", + "status": 204, + "request": { + "permission": "write" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "request": { + "permission": "read" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/alice", + "auth": "admin", + "status": 204, + "request": { + "permission": "write" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/nobody-here", + "auth": "admin", + "status": 422, + "request": { + "permission": "write" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: nobody-here]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha/collaborators", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + { + "id": "<id:id#2>", + "login": "carol", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + { + "id": "<id:id#3>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha/collaborators/bot/permission", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "permission": "write", + "role_name": "write", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "request": { + "permission": "read" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "git", + "name": "push-write-collab", + "cmd": "git push origin HEAD:refs/heads/bot-branch", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'bot-branch': \nremote: <base>/acme/alpha/compare/main...bot-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-branch" + }, + { + "kind": "git", + "name": "push-write-scoped-token", + "cmd": "git push http://bot:<token>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'bot-scoped-branch': \nremote: <base>/acme/alpha/compare/main...bot-scoped-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-scoped-branch" + }, + { + "kind": "git", + "name": "push-readonly-scope", + "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", + "ok": false, + "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403" + }, + { + "kind": "git", + "name": "push-read-collab", + "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", + "ok": false, + "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'" + }, + { + "kind": "git", + "name": "push-no-grant", + "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + }, + { + "kind": "git", + "name": "clone-no-grant", + "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", + "ok": false, + "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + }, + { + "kind": "git", + "name": "clone-read-collab", + "cmd": "git clone http://carol:<token>@<host>/acme/alpha.git <tmp>/carol-clone", + "ok": true, + "output": "Cloning into '<tmp>/carol-clone'..." + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "doomed", + "auto_init": true, + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "doomed", + "auto_init": true, + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json new file mode 100644 index 00000000..35d26005 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json @@ -0,0 +1,288 @@ +{ + "scenario": "D", + "title": "empty-repo", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/commits", + "auth": "admin", + "status": 409, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Git Repository is empty.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/commits?sha=main&limit=1", + "auth": "admin", + "status": 409, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Git Repository is empty.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": null + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/branches/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "branch does not exist [name: main]" + ], + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/refs/heads", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/refs", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/contents", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/contents/README.md", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/trees/main", + "auth": "admin", + "status": 400, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "sha not found [main]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/commits/HEAD", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "HEAD", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/archive/main.zip", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "unrecognized repository reference: main", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/pulls?state=all", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json new file mode 100644 index 00000000..69bd013a --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json @@ -0,0 +1,2211 @@ +{ + "scenario": "E", + "title": "history-reads", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 24, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "feat/x", + "commit": { + "id": "<sha#1>", + "message": "feat two\n", + "url": "<base>/acme/hist/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches?limit=1&page=2", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2", + "link": "<<base>/api/v1/repos/acme/hist/branches?limit=1&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/hist/branches?limit=1&page=1>; rel=\"prev\"" + }, + "body": [ + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "feat/x", + "commit": { + "id": "<sha#1>", + "message": "feat two\n", + "url": "<base>/acme/hist/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "branch does not exist [name: nope]" + ], + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=1&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=2&sha=main&stat=false&verification=false>; rel=\"next\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=2&sha=main&stat=false&verification=false>; rel=\"last\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=2&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"first\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"prev\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=3&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"first\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"prev\"" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=feat/x&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#5>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat one\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=<sha#1>&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#5>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat one\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?limit=1&page=2&sha=main>; rel=\"next\",<<base>/api/v1/repos/acme/hist/commits?limit=1&page=3&sha=main>; rel=\"last\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "README.md", + "status": "modified" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=nope&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 500, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "object does not exist [id: nope, rel_path: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "README.md", + "status": "modified" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#1>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "feat2.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>.diff", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/README.md b/README.md\nindex <short>..<short> 100644\n--- a/README.md\n+++ b/README.md\n@@ -1 +1,2 @@\n # hist\n+edited\n", + "must_contain": [ + "diff --git" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>.patch", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "From <sha#2> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH] third\n\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex <short>..<short> 100644\n--- a/README.md\n+++ b/README.md\n@@ -1 +1,2 @@\n # hist\n+edited\n", + "must_contain": [ + "From " + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#6>", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "<sha#6>", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/<sha#2>?recursive=true", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + }, + { + "path": "docs/guide.md", + "mode": "100644", + "type": "blob", + "size": 6, + "sha": "<sha#9>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>" + }, + { + "path": "src", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#10>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#10>" + }, + { + "path": "src/lib.rs", + "mode": "100644", + "type": "blob", + "size": 13, + "sha": "<sha#11>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>" + } + ], + "truncated": false, + "page": 1, + "total_count": 5 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/<sha#2>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + }, + { + "path": "src", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#10>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#10>" + } + ], + "truncated": false, + "page": 1, + "total_count": 3 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/main?recursive=true&per_page=2&page=1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + } + ], + "truncated": true, + "page": 1, + "total_count": 5 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#7>", + "last_commit_sha": "<sha#2>", + "type": "file", + "size": 14, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + }, + { + "name": "docs", + "path": "docs", + "sha": "<sha#8>", + "last_commit_sha": "<sha#3>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/docs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "html": "<base>/acme/hist/src/branch/main/docs" + } + }, + { + "name": "src", + "path": "src", + "sha": "<sha#10>", + "last_commit_sha": "<sha#3>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/src", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "html": "<base>/acme/hist/src/branch/main/src" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents?ref=feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#12>", + "last_commit_sha": "<sha#4>", + "type": "file", + "size": 7, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "html": "<base>/acme/hist/src/branch/feat/x/README.md" + } + }, + { + "name": "docs", + "path": "docs", + "sha": "<sha#8>", + "last_commit_sha": "<sha#3>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/docs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "html": "<base>/acme/hist/src/branch/feat/x/docs" + } + }, + { + "name": "feat1.txt", + "path": "feat1.txt", + "sha": "<sha#13>", + "last_commit_sha": "<sha#5>", + "type": "file", + "size": 3, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/feat1.txt?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/feat1.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#13>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/feat1.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/feat1.txt?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#13>", + "html": "<base>/acme/hist/src/branch/feat/x/feat1.txt" + } + }, + { + "name": "feat2.txt", + "path": "feat2.txt", + "sha": "<sha#14>", + "last_commit_sha": "<sha#1>", + "type": "file", + "size": 3, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/feat2.txt?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/feat2.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#14>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/feat2.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/feat2.txt?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#14>", + "html": "<base>/acme/hist/src/branch/feat/x/feat2.txt" + } + }, + { + "name": "src", + "path": "src", + "sha": "<sha#10>", + "last_commit_sha": "<sha#3>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/src", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "html": "<base>/acme/hist/src/branch/feat/x/src" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/docs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "guide.md", + "path": "docs/guide.md", + "sha": "<sha#9>", + "last_commit_sha": "<sha#3>", + "type": "file", + "size": 6, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs/guide.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/docs/guide.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>", + "download_url": "<base>/acme/hist/raw/branch/main/docs/guide.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs/guide.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>", + "html": "<base>/acme/hist/src/branch/main/docs/guide.md" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#7>", + "last_commit_sha": "<sha#2>", + "type": "file", + "size": 14, + "encoding": "base64", + "content": "IyBoaXN0CmVkaXRlZAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#12>", + "last_commit_sha": "<sha#4>", + "type": "file", + "size": 7, + "encoding": "base64", + "content": "IyBoaXN0Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "html_url": "<base>/acme/hist/src/commit/<sha#4>/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "download_url": "<base>/acme/hist/raw/commit/<sha#4>/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "html": "<base>/acme/hist/src/commit/<sha#4>/README.md" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/src/lib.rs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "lib.rs", + "path": "src/lib.rs", + "sha": "<sha#11>", + "last_commit_sha": "<sha#3>", + "type": "file", + "size": 13, + "encoding": "base64", + "content": "Zm4gbWFpbigpIHt9Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src/lib.rs?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/src/lib.rs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>", + "download_url": "<base>/acme/hist/raw/branch/main/src/lib.rs", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src/lib.rs?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>", + "html": "<base>/acme/hist/src/branch/main/src/lib.rs" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/nope.txt", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "object does not exist [id: , rel_path: nope.txt]" + ], + "message": "GetContentsOrList", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "object does not exist [id: nope, rel_path: ]" + ], + "message": "GetContentsOrList", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "bmV3Cg==", + "message": "add new.txt", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "new.txt", + "path": "new.txt", + "sha": "<sha#17>", + "last_commit_sha": "<sha#15>", + "type": "file", + "size": 4, + "encoding": "base64", + "content": "bmV3Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/new.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#17>", + "download_url": "<base>/acme/hist/raw/branch/main/new.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#17>", + "html": "<base>/acme/hist/src/branch/main/new.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#15>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "message": "add new.txt\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#16>", + "sha": "<sha#16>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 422, + "request": { + "content": "bmV3Cg==", + "message": "add again", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "repository file already exists [path: new.txt]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 200, + "request": { + "content": "IyBoaXN0CnVwZGF0ZWQK", + "message": "update readme", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#20>", + "last_commit_sha": "<sha#18>", + "type": "file", + "size": 15, + "encoding": "base64", + "content": "IyBoaXN0CnVwZGF0ZWQK", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#20>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#20>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#18>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>" + } + ], + "message": "update readme\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#19>", + "sha": "<sha#19>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 422, + "request": { + "content": "IyBoaXN0CnN0YWxlCg==", + "message": "stale update", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "sha does not match [given: <sha#7>, expected: <sha#20>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 422, + "request": { + "content": "IyBoaXN0Cm5vIHNoYQo=", + "message": "no sha", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[SHA]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/branch-file.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "Ygo=", + "message": "to new branch", + "branch": "main", + "new_branch": "api-branch" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "branch-file.txt", + "path": "branch-file.txt", + "sha": "<sha#23>", + "last_commit_sha": "<sha#21>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "Ygo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/branch-file.txt?ref=api-branch", + "html_url": "<base>/acme/hist/src/branch/api-branch/branch-file.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#23>", + "download_url": "<base>/acme/hist/raw/branch/api-branch/branch-file.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/branch-file.txt?ref=api-branch", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#23>", + "html": "<base>/acme/hist/src/branch/api-branch/branch-file.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#21>", + "sha": "<sha#21>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#21>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>" + } + ], + "message": "to new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#22>", + "sha": "<sha#22>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 200, + "request": { + "content": "bmV3Mgo=", + "message": "update to new branch", + "sha": "<sha#17>", + "branch": "main", + "new_branch": "api-branch-2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "new.txt", + "path": "new.txt", + "sha": "<sha#26>", + "last_commit_sha": "<sha#24>", + "type": "file", + "size": 5, + "encoding": "base64", + "content": "bmV3Mgo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=api-branch-2", + "html_url": "<base>/acme/hist/src/branch/api-branch-2/new.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#26>", + "download_url": "<base>/acme/hist/raw/branch/api-branch-2/new.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=api-branch-2", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#26>", + "html": "<base>/acme/hist/src/branch/api-branch-2/new.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#24>", + "sha": "<sha#24>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#24>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>" + } + ], + "message": "update to new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#25>", + "sha": "<sha#25>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/x.txt", + "auth": "admin", + "status": 422, + "request": { + "content": "eAo=", + "message": "dup branch", + "branch": "main", + "new_branch": "api-branch" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "branch already exists [name: api-branch]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/main.zip", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" + }, + "body_prefix_hex": "504b0304" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/main.tar.gz", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" + }, + "body_prefix_hex": "1f8b0800" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/<sha#4>.zip", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#4>.tar.gz?rev=<sha#4>>; rel=\"immutable\"" + }, + "body_prefix_hex": "504b0304" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/nope.zip", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "unrecognized repository reference: nope", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json new file mode 100644 index 00000000..1e9552f7 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json @@ -0,0 +1,4945 @@ +{ + "scenario": "F", + "title": "pulls", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Add f1", + "body": "First", + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 409, + "request": { + "title": "Add f1", + "body": "First", + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "pull request already exists for these targets [id: 1, issue_id: 1, head_repo_id: 9, base_repo_id: 9, head_branch: f1, base_branch: main]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Add f2", + "body": "Second", + "head": "f2", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 404, + "request": { + "title": "x", + "head": "nope", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 422, + "request": { + "title": "x", + "head": "main", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Invalid PullRequest: There are no changes between the head and the base", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 404, + "request": { + "title": "x", + "head": "f1", + "base": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "BaseNotExist", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 422, + "request": { + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Title]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=all&head=acme%3Af2&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "head_filter_returned_heads", + "value": [ + "f2", + "f1" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=closed&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "note", + "key": "head_sha_updated_immediately", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "head_sha_updated_within_10s", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "note", + "key": "head_sha_changed_after_push", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>.diff", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/f1.txt b/f1.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1.txt\n@@ -0,0 +1 @@\n+one\ndiff --git a/f1b.txt b/f1b.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1b.txt\n@@ -0,0 +1 @@\n+more\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>.patch", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "From <sha#2> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH 1/2] commit on f1\n\n---\n f1.txt | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 f1.txt\n\ndiff --git a/f1.txt b/f1.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1.txt\n@@ -0,0 +1 @@\n+one\n-- \n2.45.2\n\n\nFrom <sha#4> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH 2/2] commit on f1\n\n---\n f1b.txt | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 f1b.txt\n\ndiff --git a/f1b.txt b/f1b.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1b.txt\n@@ -0,0 +1 @@\n+more\n-- \n2.45.2\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/commits", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/prs/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "commit on f1\n", + "tree": { + "url": "<base>/api/v1/repos/acme/prs/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "f1b.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + }, + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/prs/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "commit on f1\n", + "tree": { + "url": "<base>/api/v1/repos/acme/prs/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "f1.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/files", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "filename": "f1.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "html_url": "<base>/acme/prs/src/commit/<sha#4>/f1.txt", + "contents_url": "<base>/api/v1/repos/acme/prs/contents/f1.txt?ref=<sha#4>", + "raw_url": "<base>/acme/prs/raw/commit/<sha#4>/f1.txt" + }, + { + "filename": "f1b.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "html_url": "<base>/acme/prs/src/commit/<sha#4>/f1b.txt", + "contents_url": "<base>/api/v1/repos/acme/prs/contents/f1b.txt?ref=<sha#4>", + "raw_url": "<base>/acme/prs/raw/commit/<sha#4>/f1b.txt" + } + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=closed&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "open" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Renamed f2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Renamed f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "admin", + "status": 200, + "request": { + "body": "looks fine", + "event": "COMMENT" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "please change", + "event": "REQUEST_CHANGES" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "now ok", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "carol", + "status": 200, + "request": { + "body": "read only approves", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 422, + "request": { + "body": "self approve", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "approve your own pull is not allowed", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "bogus", + "event": "BOGUS" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "PENDING", + "body": "bogus", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#2>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": true, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#3>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#4>", + "user": { + "id": "<id:user.id#3>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews?page=1&limit=25", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#2>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": true, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#3>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#4>", + "user": { + "id": "<id:user.id#3>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews/<id:path:reviews#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews/<id:path:reviews#1>/comments", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:issue]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "request": { + "body": "hello" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:issue]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:issue]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 201, + "request": { + "body": "hello" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "pull_request_url": "<base>/acme/prs/pulls/1", + "issue_url": "", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "original_author": "", + "original_author_id": "<id:original_author_id#1>", + "body": "hello", + "assets": [], + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "pull_request_url": "<base>/acme/prs/pulls/1", + "issue_url": "", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "original_author": "", + "original_author_id": "<id:original_author_id#1>", + "body": "hello", + "assets": [], + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/G-merge.json b/crates/forge/conformance/fixtures/1.22.6/G-merge.json new file mode 100644 index 00000000..f32668fc --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/G-merge.json @@ -0,0 +1,4507 @@ +{ + "scenario": "G", + "title": "merge", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1", + "body": "body m1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/1", + "diff_url": "<base>/acme/merges/pulls/1.diff", + "patch_url": "<base>/acme/merges/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "merge_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "merge_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1", + "body": "body m1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/1", + "diff_url": "<base>/acme/merges/pulls/1.diff", + "patch_url": "<base>/acme/merges/pulls/1.patch", + "mergeable": false, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#3>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#3>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "merged_flag_true_after_merge", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_commit_sha_present", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_commit_parent_count", + "value": 2, + "strict": true + }, + { + "kind": "note", + "key": "head_sha_unchanged_after_merge", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "", + "url": "<base>/api/swagger" + } + }, + { + "kind": "note", + "key": "immediate_merge_status", + "value": 200, + "strict": false + }, + { + "kind": "note", + "key": "immediate_merge_message", + "value": "", + "strict": false + }, + { + "kind": "note", + "key": "immediate_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "immediate_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "immediate_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1b", + "body": "body m1b", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/2", + "diff_url": "<base>/acme/merges/pulls/2.diff", + "patch_url": "<base>/acme/merges/pulls/2.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#4>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#4>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m1b", + "ref": "m1b", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge", + "head_commit_id": "<sha#6>" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "headid_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "headid_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "headid_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge", + "head_commit_id": "<sha#7>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "head out of date", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge", + "head_commit_id": "<sha#6>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "head out of date", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m3", + "body": "body m3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/4", + "diff_url": "<base>/acme/merges/pulls/4.diff", + "patch_url": "<base>/acme/merges/pulls/4.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m3", + "ref": "m3", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#8>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge", + "head_commit_id": "<sha#9>" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "wrongid_then_right_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "wrongid_then_right_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "wrongid_then_right_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 422, + "request": { + "Do": "bogus" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Do]: In", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 422, + "request": {}, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Do]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m4", + "body": "body m4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/6", + "diff_url": "<base>/acme/merges/pulls/6.diff", + "patch_url": "<base>/acme/merges/pulls/6.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m4", + "ref": "m4", + "sha": "<sha#10>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m4", + "body": "body m4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/6", + "diff_url": "<base>/acme/merges/pulls/6.diff", + "patch_url": "<base>/acme/merges/pulls/6.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m4", + "ref": "m4", + "sha": "<sha#10>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "again", + "head": "m1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/7", + "number": 7, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "again", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/7", + "diff_url": "<base>/acme/merges/pulls/7.diff", + "patch_url": "<base>/acme/merges/pulls/7.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 32, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#2>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#7>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "conflicting_pr_mergeable_after_8s", + "value": false, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#8>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/9", + "number": 9, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cf2", + "body": "body cf2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/9", + "diff_url": "<base>/acme/merges/pulls/9.diff", + "patch_url": "<base>/acme/merges/pulls/9.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cf2", + "ref": "cf2", + "sha": "<sha#12>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#13>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/10", + "number": 10, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m5", + "body": "body m5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/10", + "diff_url": "<base>/acme/merges/pulls/10.diff", + "patch_url": "<base>/acme/merges/pulls/10.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m5", + "ref": "m5", + "sha": "<sha#14>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>/merge", + "auth": "bot-scoped", + "status": 404, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/10", + "number": 10, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m5", + "body": "body m5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/10", + "diff_url": "<base>/acme/merges/pulls/10.diff", + "patch_url": "<base>/acme/merges/pulls/10.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "m5", + "ref": "m5", + "sha": "<sha#14>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 36, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "squash" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "squash_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "squash_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "squash_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/11", + "number": 11, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR sq", + "body": "body sq", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/merges/pulls/11", + "diff_url": "<base>/acme/merges/pulls/11.diff", + "patch_url": "<base>/acme/merges/pulls/11.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#15>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#15>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 37, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "sq", + "ref": "sq", + "sha": "<sha#16>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 37, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "squash_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "rebase" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "rebase_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "rebase_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/12", + "number": 12, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR rb", + "body": "body rb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/merges/pulls/12", + "diff_url": "<base>/acme/merges/pulls/12.diff", + "patch_url": "<base>/acme/merges/pulls/12.patch", + "mergeable": false, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#17>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#17>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 41, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "rb", + "ref": "rb", + "sha": "<sha#18>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 41, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#15>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "rebase_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "rebase-merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "rebase_merge_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merge_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "rebase_merge_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merge_parent_count", + "value": 2, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "fast-forward-only" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "ff_only_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "ff_only_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "ff_only_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/14", + "number": 14, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ffo", + "body": "body ffo", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/14", + "diff_url": "<base>/acme/merges/pulls/14.diff", + "patch_url": "<base>/acme/merges/pulls/14.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#19>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#19>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 42, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "ffo", + "ref": "ffo", + "sha": "<sha#19>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 42, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#20>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "ff_only_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", + "auth": "bot-scoped", + "status": 500, + "request": { + "Do": "fast-forward-only" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#14>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/15", + "number": 15, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ffo2", + "body": "body ffo2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/15", + "diff_url": "<base>/acme/merges/pulls/15.diff", + "patch_url": "<base>/acme/merges/pulls/15.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#21>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 48, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "ffo2", + "ref": "ffo2", + "sha": "<sha#22>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 48, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#19>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "status_gated_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "status_gated_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "status_gated_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/merges/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json new file mode 100644 index 00000000..949a328f --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json @@ -0,0 +1,3076 @@ +{ + "scenario": "H", + "title": "statuses", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#1>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "state": "", + "sha": "", + "total_count": 0, + "statuses": null, + "repository": null, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_state_no_statuses", + "value": "", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#1>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#1>/statuses?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "pending", + "context": "ci/test", + "description": "ci/test is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "pending", + "sha": "<sha#2>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_state_pending", + "value": "pending", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "success", + "sha": "<sha#2>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_statuses_after_pending_then_success", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/statuses?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "note", + "key": "list_history_len_after_two_posts", + "value": 2, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "failure", + "context": "ci/lint", + "description": "ci/lint is failure", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_success_plus_failure", + "value": "failure", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "ci/lint", + "description": "ci/lint is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": { + "state": "success", + "sha": "<sha#3>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_all_success", + "value": "success", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "pending", + "context": "ci/other", + "description": "ci/other is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": { + "state": "pending", + "sha": "<sha#3>", + "total_count": 3, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_success_plus_pending", + "value": "pending", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "error", + "context": "ci/err", + "description": "ci/err is error", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 4, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_with_error", + "value": "failure", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 4, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "st-success", + "description": "st-success is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "st-success is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-success", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "pending", + "context": "st-pending", + "description": "st-pending is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "st-pending is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-pending", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "failure", + "context": "st-failure", + "description": "st-failure is failure", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "st-failure is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-failure", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "error", + "context": "st-error", + "description": "st-error is error", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "st-error is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-error", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "warning", + "context": "st-warning", + "description": "st-warning is warning", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "warning", + "target_url": "http://example.invalid/run/1", + "description": "st-warning is warning", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-warning", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "skipped", + "context": "st-skipped", + "description": "st-skipped is skipped", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "skipped", + "target_url": "http://example.invalid/run/1", + "description": "st-skipped is skipped", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-skipped", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "bogus", + "context": "st-bogus", + "description": "st-bogus is bogus", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "st-bogus is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-bogus", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "", + "context": "st-empty", + "description": "st-empty is ", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "", + "target_url": "http://example.invalid/run/1", + "description": "st-empty is", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-empty", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#4>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "8" + }, + "body": { + "state": "failure", + "sha": "<sha#4>", + "total_count": 8, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "st-success is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-success", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "st-pending is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-pending", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "st-failure is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-failure", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "st-error is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-error", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#5>", + "status": "warning", + "target_url": "http://example.invalid/run/1", + "description": "st-warning is warning", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-warning", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#6>", + "status": "skipped", + "target_url": "http://example.invalid/run/1", + "description": "st-skipped is skipped", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-skipped", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#7>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "st-bogus is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-bogus", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#8>", + "status": "", + "target_url": "http://example.invalid/run/1", + "description": "st-empty is", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-empty", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "context": "no-state" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "no-state", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#5>", + "auth": "admin", + "status": 500, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetCommit[<sha#5>]: object does not exist [id: <sha#5>, rel_path: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/nope", + "auth": "admin", + "status": 500, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetCommit[nope]: object does not exist [id: nope, rel_path: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#6>", + "auth": "carol", + "status": 403, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user should have a permission to write to a repo", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#6>", + "auth": "dave", + "status": 404, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#5>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "state": "", + "sha": "", + "total_count": 0, + "statuses": null, + "repository": null, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/main/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "state": "", + "sha": "", + "total_count": 0, + "statuses": null, + "repository": null, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/main?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json new file mode 100644 index 00000000..cfe935fa --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json @@ -0,0 +1,388 @@ +{ + "scenario": "I", + "title": "branch-protection", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 403, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Branch protection already exist", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "bot", + "status": 403, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user should be an owner or a collaborator with admin write of a repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "git", + "name": "push-protected-write-collab", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "must_contain": [ + "protected" + ] + }, + { + "kind": "git", + "name": "push-protected-admin", + "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + }, + { + "kind": "git", + "name": "push-other-branch", + "cmd": "git push origin HEAD:refs/heads/other", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'other': \nremote: <base>/acme/prot/compare/main...other \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/prot.git\n * [new branch] HEAD -> other" + }, + { + "kind": "git", + "name": "delete-protected-by-push", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "push-after-enable-push", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/prot.git\n <short>..<short> HEAD -> main" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_status_check": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/nope", + "auth": "admin", + "status": 404, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json new file mode 100644 index 00000000..dcf58f46 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json @@ -0,0 +1,617 @@ +{ + "scenario": "J", + "title": "smart-http", + "error": null, + "exchanges": [ + { + "kind": "git", + "name": "clone-admin-token", + "cmd": "git clone -q http://<admin>:<token>@<host>/acme/smart.git <tmp>/j-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-admin-token", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-admin-token': \nremote: <base>/acme/smart/compare/main...j-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-admin-token" + }, + { + "kind": "git", + "name": "fetch-admin-token", + "cmd": "git fetch -q http://<admin>:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-oauth2-token", + "cmd": "git clone -q http://oauth2:<token>@<host>/acme/smart.git <tmp>/j-oauth2-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-oauth2-token", + "cmd": "git push http://oauth2:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-oauth2-token': \nremote: <base>/acme/smart/compare/main...j-oauth2-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-oauth2-token" + }, + { + "kind": "git", + "name": "fetch-oauth2-token", + "cmd": "git fetch -q http://oauth2:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bot-token", + "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-bot-token", + "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-bot-token': \nremote: <base>/acme/smart/compare/main...j-bot-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-token" + }, + { + "kind": "git", + "name": "fetch-bot-token", + "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-other-name-admin-token", + "cmd": "git clone -q http://someone:<token>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-other-name-admin-token", + "cmd": "git push http://someone:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-other-name-admin-token': \nremote: <base>/acme/smart/compare/main...j-other-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-other-name-admin-token" + }, + { + "kind": "git", + "name": "fetch-other-name-admin-token", + "cmd": "git fetch -q http://someone:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bot-name-admin-token", + "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-bot-name-admin-token", + "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-bot-name-admin-token': \nremote: <base>/acme/smart/compare/main...j-bot-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-name-admin-token" + }, + { + "kind": "git", + "name": "fetch-bot-name-admin-token", + "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-token-as-username", + "cmd": "git clone -q http://<token>:@<host>/acme/smart.git <tmp>/j-token-as-username", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-token-as-username", + "cmd": "git push http://<token>:@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-token-as-username': \nremote: <base>/acme/smart/compare/main...j-token-as-username \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-token-as-username" + }, + { + "kind": "git", + "name": "fetch-token-as-username", + "cmd": "git fetch -q http://<token>:@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bad-token", + "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", + "ok": false, + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "push-bad-token", + "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", + "ok": false, + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "fetch-bad-token", + "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", + "ok": false, + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "clone-no-credentials", + "cmd": "git clone -q <base>/acme/smart.git <tmp>/j-no-credentials", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "push-no-credentials", + "cmd": "git push <base>/acme/smart.git <sha#1>:refs/heads/j-no-credentials", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "fetch-no-credentials", + "cmd": "git fetch -q <base>/acme/smart.git main", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "ls-remote-hdr-basic-token-empty-password", + "cmd": "git -c http.extraHeader=<hdr-basic-token-empty-password> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-hdr-token", + "cmd": "git -c http.extraHeader=<hdr-token> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-hdr-bearer", + "cmd": "git -c http.extraHeader=<hdr-bearer> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n0046<sha#1> refs/heads/j-admin-token\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-upload-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "oauth2-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n0046<sha#1> refs/heads/j-admin-token\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-upload-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c7<sha#1> refs/heads/j-admin-token\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-receive-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "oauth2-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c7<sha#1> refs/heads/j-admin-token\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-receive-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000000eversion 2\n0015agent=git/2.45.2\n0013ls-refs=unborn\n0027fetch=shallow wait-for-done filter\n0012server-option\n0017object-format=sha1\n0000", + "must_contain": [ + "version 2" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "fetch-sha-tip-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-old-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-dead-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-tip-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-old-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-dead-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "ls-remote-v0", + "cmd": "git -c protocol.version=0 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-v2", + "cmd": "git -c protocol.version=2 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "clone-filter-blob-none", + "cmd": "git clone --filter=blob:none http://<admin>:<token>@<host>/acme/smart.git <tmp>/jpartial", + "ok": true, + "output": "Cloning into '<tmp>/jpartial'..." + }, + { + "kind": "note", + "key": "partial_clone_missing_objects", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "partial_clone_promisor", + "value": "true", + "strict": true + }, + { + "kind": "git", + "name": "clone-depth-1", + "cmd": "git clone -q --depth=1 http://<admin>:<token>@<host>/acme/smart.git <tmp>/jshallow", + "ok": true, + "output": "" + }, + { + "kind": "note", + "key": "shallow_clone", + "value": "true", + "strict": true + }, + { + "kind": "git", + "name": "unshallow", + "cmd": "git fetch -q --unshallow", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "flw-absent-expected-and-absent", + "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/compare/main...b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#4> -> b" + }, + { + "kind": "git", + "name": "flw-absent-expected-but-exists", + "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "git", + "name": "flw-correct-lease-nonff", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/compare/main...b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n + <short>..<short> <sha#5> -> b (forced update)" + }, + { + "kind": "git", + "name": "flw-stale-lease", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "git", + "name": "push-nonff-without-force", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "push-tags", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", + "ok": true, + "output": "remote: .. Processing 2 references \nremote: Processed 2 references in total \nTo <base>/acme/smart.git\n * [new tag] v1 -> v1\n * [new tag] v2 -> v2" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "v2", + "message": "release", + "id": "<sha#6>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#6>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v2.zip", + "tarball_url": "<base>/acme/smart/archive/v2.tar.gz" + }, + { + "name": "v1", + "message": "commit on main", + "id": "<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v1.zip", + "tarball_url": "<base>/acme/smart/archive/v1.tar.gz" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/git/refs/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/tags/v1", + "url": "<base>/api/v1/repos/acme/smart/git/refs/tags/v1", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#1>" + } + }, + { + "ref": "refs/tags/v2", + "url": "<base>/api/v1/repos/acme/smart/git/refs/tags/v2", + "object": { + "type": "tag", + "sha": "<sha#6>", + "url": "<base>/api/v1/repos/acme/smart/git/tags/<sha#6>" + } + } + ] + }, + { + "kind": "git", + "name": "delete-tag-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/tags/v1", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] v1" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "v2", + "message": "release", + "id": "<sha#6>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#6>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v2.zip", + "tarball_url": "<base>/acme/smart/archive/v2.tar.gz" + } + ] + }, + { + "kind": "git", + "name": "delete-branch-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/b", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] b" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/branches/b", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": [ + "branch does not exist [name: b]" + ], + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "git", + "name": "delete-default-branch-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/HEAD", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain" + }, + "body_text": "ref: refs/heads/main\n" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json new file mode 100644 index 00000000..5fb72197 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json @@ -0,0 +1,3796 @@ +{ + "scenario": "K", + "title": "visibility-probing", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Verify\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "dave-tokbasic", + "status": 403, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Push to create is not enabled for organizations.", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#1>", + "last_commit_sha": "<sha#2>", + "type": "file", + "size": 7, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/vis/contents/README.md?ref=main", + "html_url": "<base>/acme/vis/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/vis/git/blobs/<sha#1>", + "download_url": "<base>/acme/vis/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/vis/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/vis/git/blobs/<sha#1>", + "html": "<base>/acme/vis/src/branch/main/README.md" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "Initial commit\n", + "url": "<base>/acme/vis/commit/<sha#2>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "carol-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#2> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n003d<sha#2> refs/heads/main\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "carol-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000be<sha#2> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "carol-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "carol-tokbasic", + "status": 403, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Push to create is not enabled for organizations.", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis", + "auth": "none", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login" + }, + "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-vis-none", + "cmd": "git ls-remote <base>/acme/vis.git", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost", + "auth": "none", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login" + }, + "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-ghost-none", + "cmd": "git ls-remote <base>/acme/ghost.git", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis", + "auth": "dave-tokbasic", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login" + }, + "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-vis-dave", + "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost", + "auth": "dave-tokbasic", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login" + }, + "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-ghost-dave", + "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "9" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 48, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#5>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#6>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#7>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#8>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#9>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "13" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#5>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#6>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 48, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#7>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#8>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#9>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#10>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#11>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#12>", + "owner": { + "id": "<id:data.owner.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#13>", + "owner": { + "id": "<id:data.owner.id#3>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "name": "probe", + "full_name": "<admin>/probe", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/<admin>/probe/languages", + "html_url": "<base>/<admin>/probe", + "url": "<base>/api/v1/repos/<admin>/probe", + "link": "", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "clone_url": "<base>/<admin>/probe.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=vis&limit=50", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user/repos?limit=50", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "HasOrgOrUserVisible", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "11" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos?limit=50", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "11" + }, + "body": [ + { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#2>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#3>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#4>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#5>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 48, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#6>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#7>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#8>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:id#9>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos?limit=50", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json new file mode 100644 index 00000000..59eadf9e --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json @@ -0,0 +1,1149 @@ +{ + "scenario": "L", + "title": "force-private", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "pub1", + "private": false, + "auto_init": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "nodef", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "nodef", + "full_name": "acme/nodef", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/nodef/languages", + "html_url": "<base>/acme/nodef", + "url": "<base>/api/v1/repos/acme/nodef", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "clone_url": "<base>/acme/nodef.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice", + "status": 201, + "request": { + "name": "pub2", + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "pub2", + "full_name": "alice/pub2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/pub2/languages", + "html_url": "<base>/alice/pub2", + "url": "<base>/api/v1/repos/alice/pub2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "clone_url": "<base>/alice/pub2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/pub2", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/pub2", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice", + "status": 201, + "request": { + "name": "nodef2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "nodef2", + "full_name": "alice/nodef2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/nodef2/languages", + "html_url": "<base>/alice/nodef2", + "url": "<base>/api/v1/repos/alice/nodef2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "clone_url": "<base>/alice/nodef2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "pubco", + "visibility": "public" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "pubco", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "pubco" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/pubco", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "pubco", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "pubco" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/pubco/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "pubrepo", + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "pubco", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "html_url": "<base>/pubco", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "pubco" + }, + "name": "pubrepo", + "full_name": "pubco/pubrepo", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/pubco/pubrepo/languages", + "html_url": "<base>/pubco/pubrepo", + "url": "<base>/api/v1/repos/pubco/pubrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "clone_url": "<base>/pubco/pubrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/pubco/pubrepo", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/M-names.json b/crates/forge/conformance/fixtures/1.22.6/M-names.json new file mode 100644 index 00000000..273e2e00 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/M-names.json @@ -0,0 +1,2415 @@ +{ + "scenario": "M", + "title": "names", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "Mixed", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "mixed", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "MIXED", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/Mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/ACME/mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": ".", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: .]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "..", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: ..]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": ".hidden", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": ".hidden", + "full_name": "acme/.hidden", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/.hidden/languages", + "html_url": "<base>/acme/.hidden", + "url": "<base>/api/v1/repos/acme/.hidden", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "clone_url": "<base>/acme/.hidden.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "-dash", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "-dash", + "full_name": "acme/-dash", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/-dash/languages", + "html_url": "<base>/acme/-dash", + "url": "<base>/api/v1/repos/acme/-dash", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "clone_url": "<base>/acme/-dash.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "trail.git", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.git]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "wiki.wiki", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.wiki]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "feed.rss", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.rss]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "feed.atom", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.atom]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "a b", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: AlphaDashDot", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "a..b", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "a..b", + "full_name": "acme/a..b", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/a..b/languages", + "html_url": "<base>/acme/a..b", + "url": "<base>/api/v1/repos/acme/a..b", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/a..b.git", + "clone_url": "<base>/acme/a..b.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "api", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "api", + "full_name": "acme/api", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/api/languages", + "html_url": "<base>/acme/api", + "url": "<base>/api/v1/repos/acme/api", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "clone_url": "<base>/acme/api.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "admin", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "admin", + "full_name": "acme/admin", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/admin/languages", + "html_url": "<base>/acme/admin", + "url": "<base>/api/v1/repos/acme/admin", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "clone_url": "<base>/acme/admin.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "user", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "user", + "full_name": "acme/user", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/user/languages", + "html_url": "<base>/acme/user", + "url": "<base>/api/v1/repos/acme/user", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "clone_url": "<base>/acme/user.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "assets", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "assets", + "full_name": "acme/assets", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/assets/languages", + "html_url": "<base>/acme/assets", + "url": "<base>/api/v1/repos/acme/assets", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "clone_url": "<base>/acme/assets.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: MaxSize", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "ok_name-1.x", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "ok_name-1.x", + "full_name": "acme/ok_name-1.x", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/ok_name-1.x/languages", + "html_url": "<base>/acme/ok_name-1.x", + "url": "<base>/api/v1/repos/acme/ok_name-1.x", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "clone_url": "<base>/acme/ok_name-1.x.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "\u00fcn\u00ef", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: AlphaDashDot", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "Acme" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: Acme]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "api" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: api]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "admin" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: admin]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "user" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "assets" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: assets]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "explore" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: explore]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": ".dot" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "-dash" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "has space" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "org.git" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "org.git", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/db2a58818a04fc2a8bf33359a138ef56", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "org.git" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: MaxSize", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "Alice", + "email": "Alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: Alice]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "api", + "email": "api@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: api]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "user", + "email": "user@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "-lead", + "email": "-lead@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": ".lead", + "email": ".lead@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "trail.git", + "email": "trail.git@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "trail.git", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "trail.git@example.invalid", + "avatar_url": "<base>/avatars/3ce0652da723aaa0dc714e724efb8034", + "html_url": "<base>/trail.git", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "trail.git" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "bad name", + "email": "badname@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "rename-me", + "auto_init": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "rename-me", + "full_name": "acme/rename-me", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/rename-me/languages", + "html_url": "<base>/acme/rename-me", + "url": "<base>/api/v1/repos/acme/rename-me", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "clone_url": "<base>/acme/rename-me.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/rename-me", + "auth": "admin", + "status": 200, + "request": { + "name": "renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/rename-me", + "auth": "admin", + "status": 307, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/api/v1/repos/acme/renamed" + }, + "body_text": "<a href=\"/api/v1/repos/acme/renamed\">Temporary Redirect</a>.\n\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/rename-me", + "auth": "dave", + "status": 307, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/api/v1/repos/acme/renamed" + }, + "body_text": "<a href=\"/api/v1/repos/acme/renamed\">Temporary Redirect</a>.\n\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/rename-me.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 307, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/acme/renamed/info/refs?service=git-upload-pack" + }, + "body_text": "<a href=\"/acme/renamed/info/refs?service=git-upload-pack\">Temporary Redirect</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-old-name", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/rename-me.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main\nwarning: redirecting to <base>/acme/renamed/" + }, + { + "kind": "git", + "name": "ls-remote-new-name", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/renamed.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 422, + "request": { + "name": "mixed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "repository already exists [uname: acme, name: mixed]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 200, + "request": { + "name": "Renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Renamed", + "full_name": "acme/Renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Renamed/languages", + "html_url": "<base>/acme/Renamed", + "url": "<base>/api/v1/repos/acme/Renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "clone_url": "<base>/acme/Renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/Renamed", + "auth": "admin", + "status": 200, + "request": { + "name": "renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json new file mode 100644 index 00000000..66818ea6 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json @@ -0,0 +1,1237 @@ +{ + "scenario": "N", + "title": "default-branch", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "dev" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "dev", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "dev", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "git", + "name": "ls-remote-symref-after-change", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/dflt.git HEAD", + "ok": true, + "output": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "dev", + "commit": { + "id": "<sha#1>", + "message": "commit on dev\n", + "url": "<base>/acme/dflt/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "Initial commit\n", + "url": "<base>/acme/dflt/commit/<sha#2>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt/contents", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#3>", + "last_commit_sha": "<sha#2>", + "type": "file", + "size": 8, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/dflt/contents/README.md?ref=dev", + "html_url": "<base>/acme/dflt/src/branch/dev/README.md", + "git_url": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#3>", + "download_url": "<base>/acme/dflt/raw/branch/dev/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/dflt/contents/README.md?ref=dev", + "git": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#3>", + "html": "<base>/acme/dflt/src/branch/dev/README.md" + } + }, + { + "name": "dev.txt", + "path": "dev.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#1>", + "type": "file", + "size": 2, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/dflt/contents/dev.txt?ref=dev", + "html_url": "<base>/acme/dflt/src/branch/dev/dev.txt", + "git_url": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#4>", + "download_url": "<base>/acme/dflt/raw/branch/dev/dev.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/dflt/contents/dev.txt?ref=dev", + "git": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#4>", + "html": "<base>/acme/dflt/src/branch/dev/dev.txt" + } + } + ] + }, + { + "kind": "git", + "name": "clone-after-change", + "cmd": "git clone -q http://<admin>:<token>@<host>/acme/dflt.git <tmp>/ndflt", + "ok": true, + "output": "" + }, + { + "kind": "note", + "key": "clone_checked_out_branch", + "value": "dev", + "strict": true + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/dflt/branches/dev", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh1", + "full_name": "acme/fresh1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", + "html_url": "<base>/acme/fresh1", + "url": "<base>/api/v1/repos/acme/fresh1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "clone_url": "<base>/acme/fresh1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh1", + "full_name": "acme/fresh1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", + "html_url": "<base>/acme/fresh1", + "url": "<base>/api/v1/repos/acme/fresh1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "clone_url": "<base>/acme/fresh1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "git", + "name": "ls-remote-symref-trunk-first", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", + "ok": true, + "output": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": null + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh2", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh2", + "full_name": "acme/fresh2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh2/languages", + "html_url": "<base>/acme/fresh2", + "url": "<base>/api/v1/repos/acme/fresh2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "clone_url": "<base>/acme/fresh2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "develop", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "develop", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "git", + "name": "ls-remote-symref-main-pushed-first", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "ok": true, + "output": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "git", + "name": "ls-remote-symref-develop-pushed-second", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "ok": true, + "output": "ref: refs/heads/develop\tHEAD\n<sha#5>\tHEAD" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json new file mode 100644 index 00000000..cfcbd81c --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json @@ -0,0 +1,3418 @@ +{ + "scenario": "O", + "title": "pr-head-lifecycle", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "force_push_head_sha_follows", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "git", + "name": "ls-remote-pull-refs", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "ok": true, + "output": "<sha#3>\trefs/pull/1/head" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/life/branches/l2", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l2", + "body": "body l2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/2", + "diff_url": "<base>/acme/life/pulls/2.diff", + "patch_url": "<base>/acme/life/pulls/2.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l2", + "ref": "refs/pull/2/head", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 404, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l2", + "body": "body l2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/2", + "diff_url": "<base>/acme/life/pulls/2.diff", + "patch_url": "<base>/acme/life/pulls/2.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l2", + "ref": "refs/pull/2/head", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "git", + "name": "ls-remote-pull-refs-after-delete", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "ok": true, + "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>/commits", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/life/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "add l2\n", + "tree": { + "url": "<base>/api/v1/repos/acme/life/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "l2.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>.diff", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/l2.txt b/l2.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/l2.txt\n@@ -0,0 +1 @@\n+2\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l3", + "body": "body l3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/life/pulls/3", + "diff_url": "<base>/acme/life/pulls/3.diff", + "patch_url": "<base>/acme/life/pulls/3.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#5>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l3", + "ref": "l3", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "merged_pr_head_sha_frozen", + "value": false, + "strict": true + }, + { + "kind": "note", + "key": "merged_pr_head_sha_follows_new_branch", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l4", + "ref": "l4", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/life/branches/l4", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "open" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "note", + "key": "direct_push_marks_pr_merged", + "value": false, + "strict": true + }, + { + "kind": "note", + "key": "direct_push_seconds_to_detect", + "value": 15, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#5>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l5", + "body": "body l5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/life/pulls/5", + "diff_url": "<base>/acme/life/pulls/5.diff", + "patch_url": "<base>/acme/life/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "l5", + "ref": "l5", + "sha": "<sha#8>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#8>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json new file mode 100644 index 00000000..0b3a794c --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json @@ -0,0 +1,15519 @@ +{ + "scenario": "P", + "title": "pagination", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"first\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"first\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=0", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=-1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=0", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_0_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=100", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_100_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=51", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_51_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_50_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=-1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_-1_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=abc", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=oldest&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=newest&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=recentupdate&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"last\"" + }, + "body": [ + { + "name": "pg5", + "commit": { + "id": "<sha#2>", + "message": "add pg5\n", + "url": "<base>/acme/pages/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "pg4", + "commit": { + "id": "<sha#3>", + "message": "add pg4\n", + "url": "<base>/acme/pages/commit/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"prev\"" + }, + "body": [ + { + "name": "pg3", + "commit": { + "id": "<sha#4>", + "message": "add pg3\n", + "url": "<base>/acme/pages/commit/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "pg2", + "commit": { + "id": "<sha#5>", + "message": "add pg2\n", + "url": "<base>/acme/pages/commit/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"prev\"" + }, + "body": [ + { + "name": "pg1", + "commit": { + "id": "<sha#6>", + "message": "add pg1\n", + "url": "<base>/acme/pages/commit/<sha#6>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#1>", + "message": "Initial commit\n", + "url": "<base>/acme/pages/commit/<sha#1>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=4", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"prev\"" + }, + "body": [] + }, + { + "kind": "note", + "key": "branches_default_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches_default_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=100_count", + "value": 50, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=100_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=100&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=100&page=2>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=51_count", + "value": 50, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=51_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=51&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=51&page=2>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=0_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=0_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=0&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=0&page=3>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?page=2_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches?page=2_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/branches?page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?page=1>; rel=\"prev\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=50&page=2_count", + "value": 11, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=50&page=2_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=50&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=50&page=1>; rel=\"prev\"" + }, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s1", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#3>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s1", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "state": "success", + "sha": "<sha#1>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "state": "success", + "sha": "<sha#1>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=1&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=2&q=pgrepo&sort=alpha>; rel=\"next\",<<base>/api/v1/repos/search?limit=2&page=2&q=pgrepo&sort=alpha>; rel=\"last\"" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo1", + "full_name": "acme/pgrepo1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo1/languages", + "html_url": "<base>/acme/pgrepo1", + "url": "<base>/api/v1/repos/acme/pgrepo1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "clone_url": "<base>/acme/pgrepo1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo2", + "full_name": "acme/pgrepo2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo2/languages", + "html_url": "<base>/acme/pgrepo2", + "url": "<base>/api/v1/repos/acme/pgrepo2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "clone_url": "<base>/acme/pgrepo2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=2&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"first\",<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"prev\"" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo3", + "full_name": "acme/pgrepo3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo3/languages", + "html_url": "<base>/acme/pgrepo3", + "url": "<base>/api/v1/repos/acme/pgrepo3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "clone_url": "<base>/acme/pgrepo3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=3&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"first\",<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"prev\"" + }, + "body": { + "ok": true, + "data": [] + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json b/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json new file mode 100644 index 00000000..dbd7a7dc --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json @@ -0,0 +1,408 @@ +{ + "scenario": "Q", + "title": "protection-bypass", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viaapi.txt", + "auth": "bot", + "status": 403, + "request": { + "content": "eAo=", + "message": "api to main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: bot]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viaapi-admin.txt", + "auth": "admin", + "status": 403, + "request": { + "content": "eAo=", + "message": "api to main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: <admin>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/bypass/contents/README.md", + "auth": "bot", + "status": 403, + "request": { + "content": "Y2hhbmdlZAo=", + "message": "put to main", + "sha": "<sha#1>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: bot]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viapr.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "api new branch", + "branch": "main", + "new_branch": "q-api" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "viapr.txt", + "path": "viapr.txt", + "sha": "<sha#5>", + "last_commit_sha": "<sha#2>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/bypass/contents/viapr.txt?ref=q-api", + "html_url": "<base>/acme/bypass/src/branch/q-api/viapr.txt", + "git_url": "<base>/api/v1/repos/acme/bypass/git/blobs/<sha#5>", + "download_url": "<base>/acme/bypass/raw/branch/q-api/viapr.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/bypass/contents/viapr.txt?ref=q-api", + "git": "<base>/api/v1/repos/acme/bypass/git/blobs/<sha#5>", + "html": "<base>/acme/bypass/src/branch/q-api/viapr.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/bypass/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/bypass/commit/<sha#2>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/bypass/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "message": "api new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/bypass/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "git", + "name": "push-unprotected-branch", + "cmd": "git push origin HEAD:refs/heads/fp1", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'fp1': \nremote: <base>/acme/bypass/compare/main...fp1 \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/bypass.git\n * [new branch] HEAD -> fp1" + }, + { + "kind": "git", + "name": "force-push-unprotected-branch", + "cmd": "git push -f origin HEAD:refs/heads/fp1", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'fp1': \nremote: <base>/acme/bypass/compare/main...fp1 \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/bypass.git\n + <short>..<short> HEAD -> fp1 (forced update)" + }, + { + "kind": "git", + "name": "nonff-protected-push-disabled", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "nonff-protected-push-enabled", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "force-protected-push-enabled", + "cmd": "git push -f origin HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: branch main is protected from force push \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "git", + "name": "delete-protected-push-enabled", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "delete-protected-push-disabled", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "admin", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "can not delete default branch", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "bot", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "can not delete default branch", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "main", + "commit": { + "id": "<sha#6>", + "message": "Merge pull request 'PR q1' (#1) from q1 into main\n", + "url": "<base>/acme/bypass/commit/<sha#6>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "username": "bot" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "username": "bot" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": true, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": null, + "user_can_push": false, + "user_can_merge": true, + "effective_branch_protection_name": "main" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json new file mode 100644 index 00000000..fc8ed127 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json @@ -0,0 +1,530 @@ +{ + "scenario": "R", + "title": "token-scope-edges", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "po", + "scopes": [ + "public-only", + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "po", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "public-only", + "read:repository" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2", + "auth": "alice-po", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token scope is limited to public repos", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "alice-po", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50", + "auth": "alice-po", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "via-ro", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice", + "status": 401, + "request": { + "name": "via-all-token", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "auth required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-tokpw", + "status": 201, + "request": { + "name": "via-token-as-password", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "via-token-as-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-tokpw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "po", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "public-only", + "read:repository" + ] + }, + { + "id": "<id:id#2>", + "name": "via-token-as-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + }, + { + "id": "<id:id#3>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + }, + { + "id": "<id:id#4>", + "name": "all", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "all" + ] + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "alice-pw-on-bot", + "status": 403, + "request": { + "name": "stolen", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "doer should be the site admin or be same as the contextUser", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/bot/tokens", + "auth": "alice-pw-on-bot", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "doer should be the site admin or be same as the contextUser", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "badscope", + "scopes": [ + "nonsense" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid access token scope provided: invalid access token scope: nonsense", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "noscope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "access token must have a scope", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 422, + "request": { + "name": "", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "wo", + "scopes": [ + "write:organization" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "wo", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:organization" + ] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "bot", + "status": 201, + "request": { + "username": "botorg" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "botorg", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "botorg" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "alice-wo", + "status": 403, + "request": { + "name": "intruder" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Given user is not allowed to create repository in organization.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "alice", + "status": 403, + "request": { + "name": "intruder" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Given user is not allowed to create repository in organization.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "bot", + "status": 201, + "request": { + "name": "legit" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "botorg", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "html_url": "<base>/botorg", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "botorg" + }, + "name": "legit", + "full_name": "botorg/legit", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/botorg/legit/languages", + "html_url": "<base>/botorg/legit", + "url": "<base>/api/v1/repos/botorg/legit", + "link": "", + "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "clone_url": "<base>/botorg/legit.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/botorg", + "auth": "alice-wo", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "botorg", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "botorg" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2", + "auth": "alice-wo", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:repository]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2/branches", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "The target couldn't be found.", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json new file mode 100644 index 00000000..7fa1f35e --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json @@ -0,0 +1,508 @@ +{ + "scenario": "S", + "title": "ref-pushes", + "error": null, + "exchanges": [ + { + "kind": "git", + "name": "bot-push-replace-ref", + "cmd": "git push origin <sha#1>:refs/replace/<sha#2>", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/replace/<sha#2>" + }, + { + "kind": "git", + "name": "bot-push-pull-1-head", + "cmd": "git push origin <sha#1>:refs/pull/1/head", + "ok": false, + "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "bot-push-pull-1-head-forced", + "cmd": "git push origin +<sha#1>:refs/pull/1/head", + "ok": false, + "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-pull-999-head", + "cmd": "git push origin <sha#1>:refs/pull/999/head", + "ok": false, + "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-heads-pull-1-head", + "cmd": "git push origin <sha#1>:refs/heads/pull/1/head", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'pull/1/head': \nremote: <base>/acme/refs/compare/main...pull/1/head \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new branch] <sha#1> -> pull/1/head" + }, + { + "kind": "git", + "name": "bot-push-lightweight-tag", + "cmd": "git push origin <sha#1>:refs/tags/v-bot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new tag] <sha#1> -> v-bot" + }, + { + "kind": "git", + "name": "bot-push-annotated-tag", + "cmd": "git push origin refs/tags/annot:refs/tags/annot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new tag] annot -> annot" + }, + { + "kind": "git", + "name": "bot-push-notes-ref", + "cmd": "git push origin <sha#1>:refs/notes/commits", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/notes/commits" + }, + { + "kind": "git", + "name": "bot-push-for-ref", + "cmd": "git push origin <sha#1>:refs/for/main", + "ok": false, + "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-changes-ref", + "cmd": "git push origin <sha#1>:refs/changes/1/2", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/changes/1/2" + }, + { + "kind": "git", + "name": "bot-push-keep-around-ref", + "cmd": "git push origin <sha#1>:refs/keep-around/<sha#1>", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/keep-around/<sha#1>" + }, + { + "kind": "git", + "name": "bot-push-arbitrary-ref", + "cmd": "git push origin <sha#1>:refs/custom/thing", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/custom/thing" + }, + { + "kind": "git", + "name": "bot-push-tag-delete", + "cmd": "git push origin :refs/tags/v-bot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n - [deleted] v-bot" + }, + { + "kind": "git", + "name": "read-collab-push-tag", + "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", + "ok": false, + "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "ls-remote-all-refs", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/refs.git", + "ok": true, + "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/git/refs", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/changes/1/2", + "url": "<base>/api/v1/repos/acme/refs/git/refs/changes/1/2", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/custom/thing", + "url": "<base>/api/v1/repos/acme/refs/git/refs/custom/thing", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#3>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#3>" + } + }, + { + "ref": "refs/heads/pull/1/head", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/pull/1/head", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/r1", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/r1", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#2>" + } + }, + { + "ref": "refs/keep-around/<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/refs/keep-around/<sha#1>", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/notes/commits", + "url": "<base>/api/v1/repos/acme/refs/git/refs/notes/commits", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/pull/1/head", + "url": "<base>/api/v1/repos/acme/refs/git/refs/pull/1/head", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#2>" + } + }, + { + "ref": "refs/replace/<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/refs/replace/<sha#2>", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/tags/annot", + "url": "<base>/api/v1/repos/acme/refs/git/refs/tags/annot", + "object": { + "type": "tag", + "sha": "<sha#4>", + "url": "<base>/api/v1/repos/acme/refs/git/tags/<sha#4>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/tags", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "annot", + "message": "annotated", + "id": "<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#4>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/refs/archive/annot.zip", + "tarball_url": "<base>/acme/refs/archive/annot.tar.gz" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/refs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR r1", + "body": "body r1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/refs/pulls/1", + "diff_url": "<base>/acme/refs/pulls/1.diff", + "patch_url": "<base>/acme/refs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#3>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "refs", + "full_name": "acme/refs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/refs/languages", + "html_url": "<base>/acme/refs", + "url": "<base>/api/v1/repos/acme/refs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "clone_url": "<base>/acme/refs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "r1", + "ref": "r1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "refs", + "full_name": "acme/refs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/refs/languages", + "html_url": "<base>/acme/refs", + "url": "<base>/api/v1/repos/acme/refs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "clone_url": "<base>/acme/refs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json new file mode 100644 index 00000000..1cdb295b --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json @@ -0,0 +1,3953 @@ +{ + "scenario": "T", + "title": "merge-outcomes", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "unrelated", + "head": "orph", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "Style": "merge", + "StdOut": "", + "StdErr": "fatal: refusing to merge unrelated histories\n", + "Err": { + "Stderr": null + } + }, + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "same tree", + "head": "tid", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#4>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#4>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "contained", + "head": "cont", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + }, + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ok1", + "body": "body ok1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/4", + "diff_url": "<base>/acme/outcomes/pulls/4.diff", + "patch_url": "<base>/acme/outcomes/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "ok1", + "ref": "ok1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ok1", + "body": "body ok1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/4", + "diff_url": "<base>/acme/outcomes/pulls/4.diff", + "patch_url": "<base>/acme/outcomes/pulls/4.patch", + "mergeable": false, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#7>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#7>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "ok1", + "ref": "ok1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "conflicting_pr_mergeable_after_8s", + "value": false, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json new file mode 100644 index 00000000..036e062e --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json @@ -0,0 +1,512 @@ +{ + "scenario": "U", + "title": "status-check-edges", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/checks/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR u1", + "body": "body u1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/checks/pulls/1", + "diff_url": "<base>/acme/checks/pulls/1.diff", + "patch_url": "<base>/acme/checks/pulls/1.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#1>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": false, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "checks", + "full_name": "acme/checks", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/checks/languages", + "html_url": "<base>/acme/checks", + "url": "<base>/api/v1/repos/acme/checks", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "clone_url": "<base>/acme/checks.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "head": { + "label": "u1", + "ref": "u1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "checks", + "full_name": "acme/checks", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/checks/languages", + "html_url": "<base>/acme/checks", + "url": "<base>/api/v1/repos/acme/checks", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "clone_url": "<base>/acme/checks.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not allowed to merge [reason: Not all required status checks successful]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/checks/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json b/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json new file mode 100644 index 00000000..a6cf6f37 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json @@ -0,0 +1,257 @@ +{ + "scenario": "V", + "title": "smart-http-bytes", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate", + "expires": "Fri, 01 Jan 1980 00:00:00 GMT", + "pragma": "no-cache" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "001e# service=git-upload-pack\n0000" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate", + "expires": "Fri, 01 Jan 1980 00:00:00 GMT", + "pragma": "no-cache" + }, + "body_text": "001f# service=git-receive-pack\n000000be<sha#1> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n0000", + "must_contain": [ + "001f# service=git-receive-pack\n0000" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate" + }, + "body_text": "001e# service=git-upload-pack\n0000000eversion 2\n0015agent=git/2.45.2\n0013ls-refs=unborn\n0027fetch=shallow wait-for-done filter\n0012server-option\n0017object-format=sha1\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "v2_advert_first_bytes", + "value": "001e# service=git-upload-pack\\n0000000eversion ", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n003d<sha#1> refs/heads/main\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "v0_upload_preamble", + "value": "001e# service=git-upload-pack\\n0000", + "strict": true + }, + { + "kind": "note", + "key": "v0_upload_capabilities", + "value": "multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/<v>", + "strict": false + }, + { + "kind": "note", + "key": "v0_upload_first_pkt_prefix", + "value": "0146", + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000be<sha#1> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "receive_preamble", + "value": "001f# service=git-receive-pack\\n0000", + "strict": true + }, + { + "kind": "note", + "key": "receive_capabilities", + "value": "report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/<v>", + "strict": false + }, + { + "kind": "note", + "key": "receive_first_pkt_prefix", + "value": "00be", + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/HEAD", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain" + }, + "body_text": "ref: refs/heads/main\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/objects/info/packs", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-result", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_prefix_hex": "30303038" + }, + { + "kind": "note", + "key": "plain_upload_pack_response_head", + "value": "0008NAK\n", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-result", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_prefix_hex": "30303038" + }, + { + "kind": "note", + "key": "gzip_upload_pack_response_head", + "value": "0008NAK\n", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/meta.json b/crates/forge/conformance/fixtures/1.22.6/meta.json new file mode 100644 index 00000000..bb5b7898 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/meta.json @@ -0,0 +1,29 @@ +{ + "server_version": { + "version": "1.22.6" + }, + "scenarios": [ + "A-meta.json", + "B-users-orgs-tokens.json", + "C-repos.json", + "D-empty-repo.json", + "E-history-reads.json", + "F-pulls.json", + "G-merge.json", + "H-statuses.json", + "I-branch-protection.json", + "J-smart-http.json", + "K-visibility-probing.json", + "L-force-private.json", + "M-names.json", + "N-default-branch.json", + "O-pr-head-lifecycle.json", + "P-pagination.json", + "Q-protection-bypass.json", + "R-token-scope-edges.json", + "S-ref-pushes.json", + "T-merge-outcomes.json", + "U-status-check-edges.json", + "V-smart-http-bytes.json" + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/A-meta.json b/crates/forge/conformance/fixtures/1.26.2/A-meta.json new file mode 100644 index 00000000..45a472ff --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/A-meta.json @@ -0,0 +1,165 @@ +{ + "scenario": "A", + "title": "meta", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/version", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "version": "1.26.2" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/version", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/healthz", + "auth": "none", + "status": 200, + "headers": { + "content-type": "application/json" + }, + "body": { + "status": "pass", + "description": "Gitea: Git with a cup of tea", + "checks": { + "database:ping": [ + { + "status": "pass", + "time": "<ts>" + } + ], + "cache:ping": [ + { + "status": "pass", + "time": "<ts>" + } + ] + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/probe", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/probe", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/<admin>/missing", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json new file mode 100644 index 00000000..839b9b46 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json @@ -0,0 +1,867 @@ +{ + "scenario": "B", + "title": "users-orgs-tokens", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "alice", + "email": "alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "alice", + "email": "alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: alice]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "bot", + "email": "bot@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/admin/users/alice", + "auth": "admin", + "status": 200, + "request": { + "login_name": "alice", + "source_id": "<id:source_id#1>", + "password": "<token>", + "visibility": "private", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/nobody-here", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user redirect does not exist [name: nobody-here]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "not exist" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "acme", + "full_name": "Acme", + "visibility": "private" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "acme", + "full_name": "Acme", + "visibility": "private" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: acme]", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/nobody-org", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetOrgByName", + "url": "<base>/api/swagger", + "errors": [ + "user redirect does not exist [name: nobody-org]" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/<admin>/orgs/acme/permissions", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "is_owner": true, + "is_admin": true, + "can_write": true, + "can_read": true, + "can_create_repository": true + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/orgs/acme/permissions", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "is_owner": false, + "is_admin": false, + "can_write": false, + "can_read": false, + "can_create_repository": false + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/carol/orgs/acme/permissions", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "is_owner": false, + "is_admin": false, + "can_write": false, + "can_read": false, + "can_create_repository": false + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "ci", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "tmp", + "scopes": [ + "read:repository", + "write:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "tmp", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#2>", + "name": "tmp", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:user], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/users/alice/tokens/<id:path:tokens#1>", + "auth": "alice-basic", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "ci", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "access token name has been used already", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "bot-basic", + "status": 201, + "request": { + "name": "scoped", + "scopes": [ + "read:user", + "read:organization", + "write:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "scoped", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:organization", + "write:repository", + "read:user" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:organization], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped", + "auth": "alice-ro", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:user], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/alice/scoped/contents/new.txt", + "auth": "alice-ro", + "status": 403, + "request": { + "content": "aGk=", + "message": "m" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:repository], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/alice/scoped/contents/README.md", + "auth": "alice-ro", + "status": 403, + "request": { + "content": "aGk=", + "message": "m", + "sha": "<sha#1>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:repository], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/alice/scoped/collaborators/carol", + "auth": "alice-ro", + "status": 403, + "request": { + "permission": "write" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:repository], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/alice/scoped/statuses/<sha#2>", + "auth": "alice-ro", + "status": 403, + "request": { + "state": "success", + "context": "x" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:repository], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "HasOrgOrUserVisible" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/admin/users", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:admin], token scope=read:organization,write:repository,read:user", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "bot-scoped", + "status": 403, + "request": { + "name": "botrepo", + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:user], token scope=read:organization,write:repository,read:user", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/C-repos.json b/crates/forge/conformance/fixtures/1.26.2/C-repos.json new file mode 100644 index 00000000..04f603d9 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/C-repos.json @@ -0,0 +1,2320 @@ +{ + "scenario": "C", + "title": "repos", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "alpha", + "auto_init": true, + "default_branch": "main", + "private": true, + "readme": "Default" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "alpha", + "auto_init": true, + "default_branch": "main", + "private": true, + "readme": "Default" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "already exists" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "empty", + "auto_init": false, + "private": true, + "default_branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/empty", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/missing", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "has_actions": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/alpha", + "auth": "admin", + "status": 200, + "request": { + "description": "Alpha repo" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#3>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "name": "probe", + "full_name": "<admin>/probe", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/<admin>/probe/languages", + "html_url": "<base>/<admin>/probe", + "url": "<base>/api/v1/repos/<admin>/probe", + "link": "", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "clone_url": "<base>/<admin>/probe.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=alp&limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/bot", + "auth": "admin", + "status": 204, + "request": { + "permission": "write" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "request": { + "permission": "read" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/alice", + "auth": "admin", + "status": 204, + "request": { + "permission": "write" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/nobody-here", + "auth": "admin", + "status": 422, + "request": { + "permission": "write" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: nobody-here]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha/collaborators", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + { + "id": "<id:id#2>", + "login": "carol", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + { + "id": "<id:id#3>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha/collaborators/bot/permission", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "permission": "write", + "role_name": "write", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/alpha", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/alpha/collaborators/carol", + "auth": "admin", + "status": 204, + "request": { + "permission": "read" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "git", + "name": "push-write-collab", + "cmd": "git push origin HEAD:refs/heads/bot-branch", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'bot-branch': \nremote: <base>/acme/alpha/pulls/new/bot-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-branch" + }, + { + "kind": "git", + "name": "push-write-scoped-token", + "cmd": "git push http://bot:<token>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'bot-scoped-branch': \nremote: <base>/acme/alpha/pulls/new/bot-scoped-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-scoped-branch" + }, + { + "kind": "git", + "name": "push-readonly-scope", + "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", + "ok": false, + "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403" + }, + { + "kind": "git", + "name": "push-read-collab", + "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'" + }, + { + "kind": "git", + "name": "push-no-grant", + "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + }, + { + "kind": "git", + "name": "clone-no-grant", + "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", + "ok": false, + "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + }, + { + "kind": "git", + "name": "clone-read-collab", + "cmd": "git clone http://carol:<token>@<host>/acme/alpha.git <tmp>/carol-clone", + "ok": true, + "output": "Cloning into '<tmp>/carol-clone'..." + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "doomed", + "auto_init": true, + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/doomed", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "doomed", + "auto_init": true, + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json new file mode 100644 index 00000000..bfc4e031 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json @@ -0,0 +1,302 @@ +{ + "scenario": "D", + "title": "empty-repo", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/commits", + "auth": "admin", + "status": 409, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Git Repository is empty.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/commits?sha=main&limit=1", + "auth": "admin", + "status": 409, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Git Repository is empty.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": null + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/branches/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/refs/heads", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/refs", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/contents", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": [ + "object does not exist [id: main, rel_path: ]" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/contents/README.md", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": [ + "object does not exist [id: main, rel_path: ]" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/trees/main", + "auth": "admin", + "status": 400, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "sha not found [main]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/git/commits/HEAD", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "commit doesn't exist: HEAD", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/archive/main.zip", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "unrecognized repository reference: main", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/blank/pulls?state=all", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json new file mode 100644 index 00000000..488aab05 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json @@ -0,0 +1,2242 @@ +{ + "scenario": "E", + "title": "history-reads", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "feat/x", + "commit": { + "id": "<sha#1>", + "message": "feat two\n", + "url": "<base>/acme/hist/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches?limit=1&page=2", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2", + "link": "<<base>/api/v1/repos/acme/hist/branches?limit=1&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/hist/branches?limit=1&page=1>; rel=\"prev\"" + }, + "body": [ + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "third\n", + "url": "<base>/acme/hist/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "feat/x", + "commit": { + "id": "<sha#1>", + "message": "feat two\n", + "url": "<base>/acme/hist/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/branches/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs/heads/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/refs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/heads/feat/x", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/feat/x", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/hist/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=1&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=2&sha=main&stat=false&verification=false>; rel=\"next\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=2&sha=main&stat=false&verification=false>; rel=\"last\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=2&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"first\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"prev\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=2&page=3&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"first\",<<base>/api/v1/repos/acme/hist/commits?files=false&limit=2&page=1&sha=main&stat=false&verification=false>; rel=\"prev\"" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=feat/x&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#5>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat one\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=<sha#1>&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#5>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat one\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#3>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "second\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + ], + "files": null, + "stats": null + }, + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "first\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": null + }, + "author": null, + "committer": null, + "parents": [], + "files": null, + "stats": null + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=main&limit=1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/acme/hist/commits?limit=1&page=2&sha=main>; rel=\"next\",<<base>/api/v1/repos/acme/hist/commits?limit=1&page=3&sha=main>; rel=\"last\"" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "README.md", + "status": "modified" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/commits?sha=nope&limit=50&stat=false&files=false&verification=false", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": null + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "third\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "README.md", + "status": "modified" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#1>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "feat two\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "feat2.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>.diff", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/README.md b/README.md\nindex <short>..<short> 100644\n--- a/README.md\n+++ b/README.md\n@@ -1 +1,2 @@\n # hist\n+edited\n", + "must_contain": [ + "diff --git" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#2>.patch", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "From <sha#2> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH] third\n\n---\n README.md | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/README.md b/README.md\nindex <short>..<short> 100644\n--- a/README.md\n+++ b/README.md\n@@ -1 +1,2 @@\n # hist\n+edited\n", + "must_contain": [ + "From " + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/commits/<sha#6>", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "commit doesn't exist: <sha#6>", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/<sha#2>?recursive=true", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + }, + { + "path": "docs/guide.md", + "mode": "100644", + "type": "blob", + "size": 6, + "sha": "<sha#9>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>" + }, + { + "path": "src", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#10>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#10>" + }, + { + "path": "src/lib.rs", + "mode": "100644", + "type": "blob", + "size": 13, + "sha": "<sha#11>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>" + } + ], + "truncated": false, + "page": 1, + "total_count": 5 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/<sha#2>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + }, + { + "path": "src", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#10>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#10>" + } + ], + "truncated": false, + "page": 1, + "total_count": 3 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/git/trees/main?recursive=true&per_page=2&page=1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": { + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#2>", + "tree": [ + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "size": 14, + "sha": "<sha#7>", + "url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>" + }, + { + "path": "docs", + "mode": "040000", + "type": "tree", + "size": 0, + "sha": "<sha#8>", + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#8>" + } + ], + "truncated": true, + "page": 1, + "total_count": 5 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#7>", + "last_commit_sha": "<sha#2>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 14, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + }, + { + "name": "docs", + "path": "docs", + "sha": "<sha#8>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/docs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "html": "<base>/acme/hist/src/branch/main/docs" + } + }, + { + "name": "src", + "path": "src", + "sha": "<sha#10>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/src", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "html": "<base>/acme/hist/src/branch/main/src" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents?ref=feat/x", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#12>", + "last_commit_sha": "<sha#4>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 7, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "html": "<base>/acme/hist/src/branch/feat/x/README.md" + } + }, + { + "name": "docs", + "path": "docs", + "sha": "<sha#8>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/docs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#8>", + "html": "<base>/acme/hist/src/branch/feat/x/docs" + } + }, + { + "name": "feat1.txt", + "path": "feat1.txt", + "sha": "<sha#13>", + "last_commit_sha": "<sha#5>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 3, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/feat1.txt?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/feat1.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#13>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/feat1.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/feat1.txt?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#13>", + "html": "<base>/acme/hist/src/branch/feat/x/feat1.txt" + } + }, + { + "name": "feat2.txt", + "path": "feat2.txt", + "sha": "<sha#14>", + "last_commit_sha": "<sha#1>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 3, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/feat2.txt?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/feat2.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#14>", + "download_url": "<base>/acme/hist/raw/branch/feat/x/feat2.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/feat2.txt?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#14>", + "html": "<base>/acme/hist/src/branch/feat/x/feat2.txt" + } + }, + { + "name": "src", + "path": "src", + "sha": "<sha#10>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "dir", + "size": 0, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src?ref=feat%2Fx", + "html_url": "<base>/acme/hist/src/branch/feat/x/src", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "download_url": null, + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src?ref=feat%2Fx", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#10>", + "html": "<base>/acme/hist/src/branch/feat/x/src" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/docs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "guide.md", + "path": "docs/guide.md", + "sha": "<sha#9>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 6, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/docs/guide.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/docs/guide.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>", + "download_url": "<base>/acme/hist/raw/branch/main/docs/guide.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/docs/guide.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#9>", + "html": "<base>/acme/hist/src/branch/main/docs/guide.md" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#7>", + "last_commit_sha": "<sha#2>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 14, + "encoding": "base64", + "content": "IyBoaXN0CmVkaXRlZAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#7>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#12>", + "last_commit_sha": "<sha#4>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 7, + "encoding": "base64", + "content": "IyBoaXN0Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "html_url": "<base>/acme/hist/src/commit/<sha#4>/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "download_url": "<base>/acme/hist/raw/commit/<sha#4>/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=<sha#4>", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#12>", + "html": "<base>/acme/hist/src/commit/<sha#4>/README.md" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/src/lib.rs", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "lib.rs", + "path": "src/lib.rs", + "sha": "<sha#11>", + "last_commit_sha": "<sha#3>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 13, + "encoding": "base64", + "content": "Zm4gbWFpbigpIHt9Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/src/lib.rs?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/src/lib.rs", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>", + "download_url": "<base>/acme/hist/raw/branch/main/src/lib.rs", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/src/lib.rs?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#11>", + "html": "<base>/acme/hist/src/branch/main/src/lib.rs" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/nope.txt", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetContentsOrList", + "url": "<base>/api/swagger", + "errors": [ + "object does not exist [id: , rel_path: nope.txt]" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/contents/README.md?ref=nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": [ + "object does not exist [id: nope, rel_path: ]" + ] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "bmV3Cg==", + "message": "add new.txt", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "new.txt", + "path": "new.txt", + "sha": "<sha#17>", + "last_commit_sha": "<sha#15>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 4, + "encoding": "base64", + "content": "bmV3Cg==", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/new.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#17>", + "download_url": "<base>/acme/hist/raw/branch/main/new.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#17>", + "html": "<base>/acme/hist/src/branch/main/new.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#15>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "message": "add new.txt\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#16>", + "sha": "<sha#16>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 422, + "request": { + "content": "bmV3Cg==", + "message": "add again", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "repository file already exists [path: new.txt]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 200, + "request": { + "content": "IyBoaXN0CnVwZGF0ZWQK", + "message": "update readme", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#20>", + "last_commit_sha": "<sha#18>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 15, + "encoding": "base64", + "content": "IyBoaXN0CnVwZGF0ZWQK", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "html_url": "<base>/acme/hist/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#20>", + "download_url": "<base>/acme/hist/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#20>", + "html": "<base>/acme/hist/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#18>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>" + } + ], + "message": "update readme\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#19>", + "sha": "<sha#19>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 422, + "request": { + "content": "IyBoaXN0CnN0YWxlCg==", + "message": "stale update", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "sha does not match [given: <sha#7>, expected: <sha#20>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/README.md", + "auth": "admin", + "status": 422, + "request": { + "content": "IyBoaXN0Cm5vIHNoYQo=", + "message": "no sha", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "repository file already exists [path: README.md]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/branch-file.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "Ygo=", + "message": "to new branch", + "branch": "main", + "new_branch": "api-branch" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "branch-file.txt", + "path": "branch-file.txt", + "sha": "<sha#23>", + "last_commit_sha": "<sha#21>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "Ygo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/branch-file.txt?ref=api-branch", + "html_url": "<base>/acme/hist/src/branch/api-branch/branch-file.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#23>", + "download_url": "<base>/acme/hist/raw/branch/api-branch/branch-file.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/branch-file.txt?ref=api-branch", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#23>", + "html": "<base>/acme/hist/src/branch/api-branch/branch-file.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#21>", + "sha": "<sha#21>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#21>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>" + } + ], + "message": "to new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#22>", + "sha": "<sha#22>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/hist/contents/new.txt", + "auth": "admin", + "status": 200, + "request": { + "content": "bmV3Mgo=", + "message": "update to new branch", + "sha": "<sha#17>", + "branch": "main", + "new_branch": "api-branch-2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "new.txt", + "path": "new.txt", + "sha": "<sha#26>", + "last_commit_sha": "<sha#24>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 5, + "encoding": "base64", + "content": "bmV3Mgo=", + "target": null, + "url": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=api-branch-2", + "html_url": "<base>/acme/hist/src/branch/api-branch-2/new.txt", + "git_url": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#26>", + "download_url": "<base>/acme/hist/raw/branch/api-branch-2/new.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/hist/contents/new.txt?ref=api-branch-2", + "git": "<base>/api/v1/repos/acme/hist/git/blobs/<sha#26>", + "html": "<base>/acme/hist/src/branch/api-branch-2/new.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#24>", + "sha": "<sha#24>", + "created": "<ts>", + "html_url": "<base>/acme/hist/commit/<sha#24>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/hist/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>" + } + ], + "message": "update to new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/hist/git/trees/<sha#25>", + "sha": "<sha#25>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/hist/contents/x.txt", + "auth": "admin", + "status": 422, + "request": { + "content": "eAo=", + "message": "dup branch", + "branch": "main", + "new_branch": "api-branch" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "branch already exists [name: api-branch]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/main.zip", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.zip?rev=<sha#18>>; rel=\"immutable\"" + }, + "body_prefix_hex": "504b0304" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/main.tar.gz", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" + }, + "body_prefix_hex": "1f8b0800" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/<sha#4>.zip", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/octet-stream", + "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#4>.zip?rev=<sha#4>>; rel=\"immutable\"" + }, + "body_prefix_hex": "504b0304" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/hist/archive/nope.zip", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "unrecognized repository reference: nope", + "url": "<base>/api/swagger" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json new file mode 100644 index 00000000..deec4861 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json @@ -0,0 +1,5064 @@ +{ + "scenario": "F", + "title": "pulls", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Add f1", + "body": "First", + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 409, + "request": { + "title": "Add f1", + "body": "First", + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "pull request already exists for these targets [id: 1, issue_id: 1, head_repo_id: 9, base_repo_id: 9, head_branch: f1, base_branch: main]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Add f2", + "body": "Second", + "head": "f2", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 404, + "request": { + "title": "x", + "head": "nope", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 422, + "request": { + "title": "x", + "head": "main", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Invalid PullRequest: There are no changes between the head and the base", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 404, + "request": { + "title": "x", + "head": "f1", + "base": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls", + "auth": "bot-scoped", + "status": 422, + "request": { + "head": "f1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Title]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=all&head=acme%3Af2&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "head_filter_returned_heads", + "value": [ + "f2", + "f1" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=closed&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "note", + "key": "head_sha_updated_immediately", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "head_sha_updated_within_10s", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "note", + "key": "head_sha_changed_after_push", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/prs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f1", + "body": "First", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/1", + "diff_url": "<base>/acme/prs/pulls/1.diff", + "patch_url": "<base>/acme/prs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f1", + "ref": "f1", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>.diff", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/f1.txt b/f1.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1.txt\n@@ -0,0 +1 @@\n+one\ndiff --git a/f1b.txt b/f1b.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1b.txt\n@@ -0,0 +1 @@\n+more\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>.patch", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "From <sha#2> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH 1/2] commit on f1\n\n---\n f1.txt | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 f1.txt\n\ndiff --git a/f1.txt b/f1.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1.txt\n@@ -0,0 +1 @@\n+one\n-- \n2.52.0\n\n\nFrom <sha#4> Mon Sep 17 00:00:00 2001\nFrom: Conf <conf@example.invalid>\nDate: <ts>\nSubject: [PATCH 2/2] commit on f1\n\n---\n f1b.txt | 1 +\n 1 file changed, 1 insertion(+)\n create mode 100644 f1b.txt\n\ndiff --git a/f1b.txt b/f1b.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/f1b.txt\n@@ -0,0 +1 @@\n+more\n-- \n2.52.0\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/commits", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/prs/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "commit on f1\n", + "tree": { + "url": "<base>/api/v1/repos/acme/prs/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "f1b.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + }, + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/prs/commit/<sha#2>", + "commit": { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "commit on f1\n", + "tree": { + "url": "<base>/api/v1/repos/acme/prs/git/trees/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/prs/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "f1.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/files", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "filename": "f1.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "html_url": "<base>/acme/prs/src/commit/<sha#4>/f1.txt", + "contents_url": "<base>/api/v1/repos/acme/prs/contents/f1.txt?ref=<sha#4>", + "raw_url": "<base>/acme/prs/raw/commit/<sha#4>/f1.txt" + }, + { + "filename": "f1b.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "html_url": "<base>/acme/prs/src/commit/<sha#4>/f1b.txt", + "contents_url": "<base>/api/v1/repos/acme/prs/contents/f1b.txt?ref=<sha#4>", + "raw_url": "<base>/acme/prs/raw/commit/<sha#4>/f1b.txt" + } + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls?state=closed&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "open" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Add f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "Renamed f2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/prs/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "Renamed f2", + "body": "Second", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/prs/pulls/2", + "diff_url": "<base>/acme/prs/pulls/2.diff", + "patch_url": "<base>/acme/prs/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "f2", + "ref": "f2", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "admin", + "status": 200, + "request": { + "body": "looks fine", + "event": "COMMENT" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "please change", + "event": "REQUEST_CHANGES" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "now ok", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "carol", + "status": 200, + "request": { + "body": "read only approves", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 422, + "request": { + "body": "self approve", + "event": "APPROVED" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "approve your own pull is not allowed", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "alice", + "status": 200, + "request": { + "body": "bogus", + "event": "BOGUS" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "alice", + "login_name": "alice", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "PENDING", + "body": "bogus", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#2>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": true, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#3>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#4>", + "user": { + "id": "<id:user.id#3>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews?page=1&limit=25", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#2>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "REQUEST_CHANGES", + "body": "please change", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": true, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#3>", + "user": { + "id": "<id:user.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "team": null, + "state": "APPROVED", + "body": "now ok", + "commit_id": "<sha#4>", + "stale": false, + "official": true, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "pull_request_url": "<base>/acme/prs/pulls/1" + }, + { + "id": "<id:id#4>", + "user": { + "id": "<id:user.id#3>", + "login": "carol", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "carol@example.invalid", + "avatar_url": "<base>/avatars/ee6690b07021d18ebb41590287ae5e0b", + "html_url": "<base>/carol", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "carol" + }, + "team": null, + "state": "APPROVED", + "body": "read only approves", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews/<id:path:reviews#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "user": { + "id": "<id:user.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "team": null, + "state": "COMMENT", + "body": "looks fine", + "commit_id": "<sha#4>", + "stale": false, + "official": false, + "dismissed": false, + "comments_count": 0, + "submitted_at": "<ts>", + "updated_at": "<ts>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "pull_request_url": "<base>/acme/prs/pulls/1" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/pulls/<id:path:pulls#1>/reviews/<id:path:reviews#1>/comments", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:issue], token scope=read:organization,write:repository,read:user", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "request": { + "body": "hello" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:issue], token scope=read:organization,write:repository,read:user", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot-scoped", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:issue], token scope=read:organization,write:repository,read:user", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 201, + "request": { + "body": "hello" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "pull_request_url": "<base>/acme/prs/pulls/1", + "issue_url": "", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "original_author": "", + "original_author_id": "<id:original_author_id#1>", + "body": "hello", + "assets": [], + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prs/issues/<id:path:issues#1>/comments", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "pull_request_url": "<base>/acme/prs/pulls/1", + "issue_url": "", + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "original_author": "", + "original_author_id": "<id:original_author_id#1>", + "body": "hello", + "assets": [], + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/G-merge.json b/crates/forge/conformance/fixtures/1.26.2/G-merge.json new file mode 100644 index 00000000..f16833ce --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/G-merge.json @@ -0,0 +1,4654 @@ +{ + "scenario": "G", + "title": "merge", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1", + "body": "body m1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/1", + "diff_url": "<base>/acme/merges/pulls/1.diff", + "patch_url": "<base>/acme/merges/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "merge_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "merge_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1", + "body": "body m1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/1", + "diff_url": "<base>/acme/merges/pulls/1.diff", + "patch_url": "<base>/acme/merges/pulls/1.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#3>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#3>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "merged_flag_true_after_merge", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_commit_sha_present", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "merge_commit_parent_count", + "value": 2, + "strict": true + }, + { + "kind": "note", + "key": "head_sha_unchanged_after_merge", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The PR is already merged", + "url": "<base>/api/swagger" + } + }, + { + "kind": "note", + "key": "immediate_merge_status", + "value": 200, + "strict": false + }, + { + "kind": "note", + "key": "immediate_merge_message", + "value": "", + "strict": false + }, + { + "kind": "note", + "key": "immediate_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "immediate_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "immediate_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m1b", + "body": "body m1b", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/2", + "diff_url": "<base>/acme/merges/pulls/2.diff", + "patch_url": "<base>/acme/merges/pulls/2.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#4>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#4>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m1b", + "ref": "m1b", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge", + "head_commit_id": "<sha#6>" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "headid_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "headid_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "headid_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge", + "head_commit_id": "<sha#7>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "head out of date", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge", + "head_commit_id": "<sha#6>" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "head out of date", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m3", + "body": "body m3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/4", + "diff_url": "<base>/acme/merges/pulls/4.diff", + "patch_url": "<base>/acme/merges/pulls/4.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m3", + "ref": "m3", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#8>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge", + "head_commit_id": "<sha#9>" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "wrongid_then_right_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "wrongid_then_right_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "wrongid_then_right_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 422, + "request": { + "Do": "bogus" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Do]: In", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 422, + "request": {}, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Do]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m4", + "body": "body m4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/6", + "diff_url": "<base>/acme/merges/pulls/6.diff", + "patch_url": "<base>/acme/merges/pulls/6.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m4", + "ref": "m4", + "sha": "<sha#10>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m4", + "body": "body m4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/6", + "diff_url": "<base>/acme/merges/pulls/6.diff", + "patch_url": "<base>/acme/merges/pulls/6.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m4", + "ref": "m4", + "sha": "<sha#10>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "again", + "head": "m1", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/7", + "number": 7, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "again", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/merges/pulls/7", + "diff_url": "<base>/acme/merges/pulls/7.diff", + "patch_url": "<base>/acme/merges/pulls/7.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#10>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m1", + "ref": "m1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 28, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 7, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#2>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#7>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "conflicting_pr_mergeable_after_8s", + "value": false, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#8>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/9", + "number": 9, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cf2", + "body": "body cf2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/9", + "diff_url": "<base>/acme/merges/pulls/9.diff", + "patch_url": "<base>/acme/merges/pulls/9.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 10, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cf2", + "ref": "cf2", + "sha": "<sha#12>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 10, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#13>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/10", + "number": 10, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m5", + "body": "body m5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/10", + "diff_url": "<base>/acme/merges/pulls/10.diff", + "patch_url": "<base>/acme/merges/pulls/10.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 11, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m5", + "ref": "m5", + "sha": "<sha#14>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 11, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>/merge", + "auth": "bot-scoped", + "status": 404, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#9>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/10", + "number": 10, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR m5", + "body": "body m5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/10", + "diff_url": "<base>/acme/merges/pulls/10.diff", + "patch_url": "<base>/acme/merges/pulls/10.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#11>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 11, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "m5", + "ref": "m5", + "sha": "<sha#14>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 31, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 11, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "squash" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "squash_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "squash_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "squash_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/11", + "number": 11, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR sq", + "body": "body sq", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/merges/pulls/11", + "diff_url": "<base>/acme/merges/pulls/11.diff", + "patch_url": "<base>/acme/merges/pulls/11.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#15>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#15>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 12, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "sq", + "ref": "sq", + "sha": "<sha#16>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 34, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 12, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#11>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "squash_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "rebase" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "rebase_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "rebase_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/12", + "number": 12, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR rb", + "body": "body rb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/merges/pulls/12", + "diff_url": "<base>/acme/merges/pulls/12.diff", + "patch_url": "<base>/acme/merges/pulls/12.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#17>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#17>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 35, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 14, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "rb", + "ref": "rb", + "sha": "<sha#18>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 35, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 14, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#15>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "rebase_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "rebase-merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "rebase_merge_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merge_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "rebase_merge_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "note", + "key": "rebase_merge_parent_count", + "value": 2, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "fast-forward-only" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "ff_only_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "ff_only_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "ff_only_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/14", + "number": 14, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ffo", + "body": "body ffo", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/14", + "diff_url": "<base>/acme/merges/pulls/14.diff", + "patch_url": "<base>/acme/merges/pulls/14.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#19>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#19>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 41, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 17, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "ffo", + "ref": "ffo", + "sha": "<sha#19>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 41, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 17, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#20>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "ff_only_parent_count", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", + "auth": "bot-scoped", + "status": 500, + "request": { + "Do": "fast-forward-only" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#14>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/merges/pulls/15", + "number": 15, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ffo2", + "body": "body ffo2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/merges/pulls/15", + "diff_url": "<base>/acme/merges/pulls/15.diff", + "patch_url": "<base>/acme/merges/pulls/15.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#21>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 43, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 19, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "ffo2", + "ref": "ffo2", + "sha": "<sha#22>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 43, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 19, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#19>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + }, + "must_contain": [ + "required status checks" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/merges/pulls/<id:path:pulls#15>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "status_gated_merged_immediately_after_merge_call", + "value": true, + "strict": false + }, + { + "kind": "note", + "key": "status_gated_merged_within_10s", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "status_gated_seconds_to_merged", + "value": 0, + "strict": false + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/merges/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json new file mode 100644 index 00000000..a08cea36 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json @@ -0,0 +1,3298 @@ +{ + "scenario": "H", + "title": "statuses", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#1>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "state": "pending", + "sha": "<sha#1>", + "total_count": 0, + "statuses": null, + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#1>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#1>/status" + } + }, + { + "kind": "note", + "key": "combined_state_no_statuses", + "value": "pending", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#1>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#1>/statuses?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "pending", + "context": "ci/test", + "description": "ci/test is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "pending", + "sha": "<sha#2>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#2>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#2>/status" + } + }, + { + "kind": "note", + "key": "combined_state_pending", + "value": "pending", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "success", + "sha": "<sha#2>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#2>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#2>/status" + } + }, + { + "kind": "note", + "key": "combined_statuses_after_pending_then_success", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#2>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#2>/statuses?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "note", + "key": "list_history_len_after_two_posts", + "value": 2, + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "failure", + "context": "ci/lint", + "description": "ci/lint is failure", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#3>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#3>/status" + } + }, + { + "kind": "note", + "key": "combined_success_plus_failure", + "value": "failure", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "ci/lint", + "description": "ci/lint is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": { + "state": "success", + "sha": "<sha#3>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#3>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#3>/status" + } + }, + { + "kind": "note", + "key": "combined_all_success", + "value": "success", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "pending", + "context": "ci/other", + "description": "ci/other is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": { + "state": "pending", + "sha": "<sha#3>", + "total_count": 3, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#3>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#3>/status" + } + }, + { + "kind": "note", + "key": "combined_success_plus_pending", + "value": "pending", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#3>", + "auth": "admin", + "status": 201, + "request": { + "state": "error", + "context": "ci/err", + "description": "ci/err is error", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 4, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#3>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#3>/status" + } + }, + { + "kind": "note", + "key": "combined_with_error", + "value": "failure", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#3>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": { + "state": "failure", + "sha": "<sha#3>", + "total_count": 4, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/test is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/test", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "ci/lint is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/lint", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "ci/other is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/other", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "ci/err is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#3>", + "context": "ci/err", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#3>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#3>/status" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "st-success", + "description": "st-success is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "st-success is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-success", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "pending", + "context": "st-pending", + "description": "st-pending is pending", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "st-pending is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-pending", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "failure", + "context": "st-failure", + "description": "st-failure is failure", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "st-failure is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-failure", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "error", + "context": "st-error", + "description": "st-error is error", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "st-error is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-error", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "warning", + "context": "st-warning", + "description": "st-warning is warning", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "warning", + "target_url": "http://example.invalid/run/1", + "description": "st-warning is warning", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-warning", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "skipped", + "context": "st-skipped", + "description": "st-skipped is skipped", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "skipped", + "target_url": "http://example.invalid/run/1", + "description": "st-skipped is skipped", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-skipped", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "bogus", + "context": "st-bogus", + "description": "st-bogus is bogus", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "st-bogus is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-bogus", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "", + "context": "st-empty", + "description": "st-empty is ", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "", + "target_url": "http://example.invalid/run/1", + "description": "st-empty is", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-empty", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#4>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "8" + }, + "body": { + "state": "failure", + "sha": "<sha#4>", + "total_count": 8, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "http://example.invalid/run/1", + "description": "st-success is success", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-success", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "pending", + "target_url": "http://example.invalid/run/1", + "description": "st-pending is pending", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-pending", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#3>", + "status": "failure", + "target_url": "http://example.invalid/run/1", + "description": "st-failure is failure", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-failure", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#4>", + "status": "error", + "target_url": "http://example.invalid/run/1", + "description": "st-error is error", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-error", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#5>", + "status": "warning", + "target_url": "http://example.invalid/run/1", + "description": "st-warning is warning", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-warning", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#6>", + "status": "skipped", + "target_url": "http://example.invalid/run/1", + "description": "st-skipped is skipped", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-skipped", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#7>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "st-bogus is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-bogus", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#8>", + "status": "", + "target_url": "http://example.invalid/run/1", + "description": "st-empty is", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "st-empty", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#4>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#4>/status" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "context": "no-state" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "no-state", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#4>", + "auth": "admin", + "status": 201, + "request": { + "state": "success", + "context": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#4>", + "context": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#5>", + "auth": "admin", + "status": 500, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetCommit[<sha#5>]: object does not exist [id: <sha#5>, rel_path: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/nope", + "auth": "admin", + "status": 500, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "GetCommit[nope]: object does not exist [id: nope, rel_path: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#6>", + "auth": "carol", + "status": 403, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user should have a permission to write to a repo", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#6>", + "auth": "dave", + "status": 404, + "request": { + "state": "success", + "context": "ci/test", + "description": "ci/test is success", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#5>/status?limit=50", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": [ + "object does not exist [id: <sha#5>, rel_path: ]" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/main/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "state": "pending", + "sha": "<sha#6>", + "total_count": 0, + "statuses": null, + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#6>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#6>/status" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/main?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json new file mode 100644 index 00000000..231549dd --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json @@ -0,0 +1,423 @@ +{ + "scenario": "I", + "title": "branch-protection", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 403, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Branch protection already exist", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/nope", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/prot/branch_protections", + "auth": "bot", + "status": 403, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user should be an owner or a collaborator with admin write of a repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "git", + "name": "push-protected-write-collab", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "must_contain": [ + "protected" + ] + }, + { + "kind": "git", + "name": "push-protected-admin", + "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + }, + { + "kind": "git", + "name": "push-other-branch", + "cmd": "git push origin HEAD:refs/heads/other", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'other': \nremote: <base>/acme/prot/pulls/new/other \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/prot.git\n * [new branch] HEAD -> other" + }, + { + "kind": "git", + "name": "delete-protected-by-push", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "push-after-enable-push", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/prot.git\n <short>..<short> HEAD -> main" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_status_check": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/prot/branch_protections/nope", + "auth": "admin", + "status": 404, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "not found", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/prot/branch_protections/main", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json new file mode 100644 index 00000000..31cf2a0a --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json @@ -0,0 +1,615 @@ +{ + "scenario": "J", + "title": "smart-http", + "error": null, + "exchanges": [ + { + "kind": "git", + "name": "clone-admin-token", + "cmd": "git clone -q http://<admin>:<token>@<host>/acme/smart.git <tmp>/j-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-admin-token", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-admin-token': \nremote: <base>/acme/smart/pulls/new/j-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-admin-token" + }, + { + "kind": "git", + "name": "fetch-admin-token", + "cmd": "git fetch -q http://<admin>:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-oauth2-token", + "cmd": "git clone -q http://oauth2:<token>@<host>/acme/smart.git <tmp>/j-oauth2-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-oauth2-token", + "cmd": "git push http://oauth2:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-oauth2-token': \nremote: <base>/acme/smart/pulls/new/j-oauth2-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-oauth2-token" + }, + { + "kind": "git", + "name": "fetch-oauth2-token", + "cmd": "git fetch -q http://oauth2:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bot-token", + "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-bot-token", + "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-bot-token': \nremote: <base>/acme/smart/pulls/new/j-bot-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-token" + }, + { + "kind": "git", + "name": "fetch-bot-token", + "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-other-name-admin-token", + "cmd": "git clone -q http://someone:<token>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-other-name-admin-token", + "cmd": "git push http://someone:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-other-name-admin-token': \nremote: <base>/acme/smart/pulls/new/j-other-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-other-name-admin-token" + }, + { + "kind": "git", + "name": "fetch-other-name-admin-token", + "cmd": "git fetch -q http://someone:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bot-name-admin-token", + "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-bot-name-admin-token", + "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-bot-name-admin-token': \nremote: <base>/acme/smart/pulls/new/j-bot-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-name-admin-token" + }, + { + "kind": "git", + "name": "fetch-bot-name-admin-token", + "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-token-as-username", + "cmd": "git clone -q http://<token>:@<host>/acme/smart.git <tmp>/j-token-as-username", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "push-token-as-username", + "cmd": "git push http://<token>:@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'j-token-as-username': \nremote: <base>/acme/smart/pulls/new/j-token-as-username \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-token-as-username" + }, + { + "kind": "git", + "name": "fetch-token-as-username", + "cmd": "git fetch -q http://<token>:@<host>/acme/smart.git main", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "clone-bad-token", + "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", + "ok": false, + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "push-bad-token", + "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", + "ok": false, + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "fetch-bad-token", + "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", + "ok": false, + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + }, + { + "kind": "git", + "name": "clone-no-credentials", + "cmd": "git clone -q <base>/acme/smart.git <tmp>/j-no-credentials", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "push-no-credentials", + "cmd": "git push <base>/acme/smart.git <sha#1>:refs/heads/j-no-credentials", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "fetch-no-credentials", + "cmd": "git fetch -q <base>/acme/smart.git main", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "git", + "name": "ls-remote-hdr-basic-token-empty-password", + "cmd": "git -c http.extraHeader=<hdr-basic-token-empty-password> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-hdr-token", + "cmd": "git -c http.extraHeader=<hdr-token> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-hdr-bearer", + "cmd": "git -c http.extraHeader=<hdr-bearer> ls-remote <base>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n0046<sha#1> refs/heads/j-admin-token\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-upload-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "oauth2-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n0046<sha#1> refs/heads/j-admin-token\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-upload-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000cd<sha#1> refs/heads/j-admin-token\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-receive-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-receive-pack", + "auth": "oauth2-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000cd<sha#1> refs/heads/j-admin-token\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n004f<sha#1> refs/heads/j-bot-name-admin-token\n0044<sha#1> refs/heads/j-bot-token\n0047<sha#1> refs/heads/j-oauth2-token\n0051<sha#1> refs/heads/j-other-name-admin-token\n004c<sha#1> refs/heads/j-token-as-username\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "service=git-receive-pack" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000000eversion 2\n001bagent=git/2.52.0-Linux\n0013ls-refs=unborn\n0027fetch=shallow wait-for-done filter\n0012server-option\n0017object-format=sha1\n0000", + "must_contain": [ + "version 2" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "fetch-sha-tip-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-old-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-dead-v0", + "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-tip-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-old-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "fetch-sha-dead-v2", + "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "ls-remote-v0", + "cmd": "git -c protocol.version=0 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "ls-remote-v2", + "cmd": "git -c protocol.version=2 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" + }, + { + "kind": "git", + "name": "clone-filter-blob-none", + "cmd": "git clone --filter=blob:none http://<admin>:<token>@<host>/acme/smart.git <tmp>/jpartial", + "ok": true, + "output": "Cloning into '<tmp>/jpartial'..." + }, + { + "kind": "note", + "key": "partial_clone_missing_objects", + "value": true, + "strict": true + }, + { + "kind": "note", + "key": "partial_clone_promisor", + "value": "true", + "strict": true + }, + { + "kind": "git", + "name": "clone-depth-1", + "cmd": "git clone -q --depth=1 http://<admin>:<token>@<host>/acme/smart.git <tmp>/jshallow", + "ok": true, + "output": "" + }, + { + "kind": "note", + "key": "shallow_clone", + "value": "true", + "strict": true + }, + { + "kind": "git", + "name": "unshallow", + "cmd": "git fetch -q --unshallow", + "ok": true, + "output": "" + }, + { + "kind": "git", + "name": "flw-absent-expected-and-absent", + "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/pulls/new/b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#4> -> b" + }, + { + "kind": "git", + "name": "flw-absent-expected-but-exists", + "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "git", + "name": "flw-correct-lease-nonff", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/pulls/new/b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n + <short>..<short> <sha#5> -> b (forced update)" + }, + { + "kind": "git", + "name": "flw-stale-lease", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "git", + "name": "push-nonff-without-force", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "ok": false, + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "push-tags", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", + "ok": true, + "output": "remote: .. Processing 2 references \nremote: Processed 2 references in total \nTo <base>/acme/smart.git\n * [new tag] v1 -> v1\n * [new tag] v2 -> v2" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "v2", + "message": "release", + "id": "<sha#6>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#6>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v2.zip", + "tarball_url": "<base>/acme/smart/archive/v2.tar.gz" + }, + { + "name": "v1", + "message": "commit on main", + "id": "<sha#1>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v1.zip", + "tarball_url": "<base>/acme/smart/archive/v1.tar.gz" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/git/refs/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/tags/v1", + "url": "<base>/api/v1/repos/acme/smart/git/refs/tags/v1", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#1>" + } + }, + { + "ref": "refs/tags/v2", + "url": "<base>/api/v1/repos/acme/smart/git/refs/tags/v2", + "object": { + "type": "tag", + "sha": "<sha#6>", + "url": "<base>/api/v1/repos/acme/smart/git/tags/<sha#6>" + } + } + ] + }, + { + "kind": "git", + "name": "delete-tag-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/tags/v1", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] v1" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/tags", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "v2", + "message": "release", + "id": "<sha#6>", + "commit": { + "url": "<base>/api/v1/repos/acme/smart/git/commits/<sha#6>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/smart/archive/v2.zip", + "tarball_url": "<base>/acme/smart/archive/v2.tar.gz" + } + ] + }, + { + "kind": "git", + "name": "delete-branch-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/b", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] b" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/smart/branches/b", + "auth": "admin", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "git", + "name": "delete-default-branch-by-push", + "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/smart.git/HEAD", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain" + }, + "body_text": "ref: refs/heads/main\n" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json new file mode 100644 index 00000000..54824cc3 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json @@ -0,0 +1,3924 @@ +{ + "scenario": "K", + "title": "visibility-probing", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "bad", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "bad-tokbasic", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Failed to authenticate user\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "not found", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "not found" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "dave-tokbasic", + "status": 403, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Push to create is not enabled for organizations.", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/contents", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#1>", + "last_commit_sha": "<sha#2>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 7, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/vis/contents/README.md?ref=main", + "html_url": "<base>/acme/vis/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/vis/git/blobs/<sha#1>", + "download_url": "<base>/acme/vis/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/vis/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/vis/git/blobs/<sha#1>", + "html": "<base>/acme/vis/src/branch/main/README.md" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/vis/branches", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "Initial commit\n", + "url": "<base>/acme/vis/commit/<sha#2>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": false, + "user_can_merge": false, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-upload-pack", + "auth": "carol-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#2> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n003d<sha#2> refs/heads/main\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis.git/info/refs?service=git-receive-pack", + "auth": "carol-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c4<sha#2> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/contents", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "errors": null, + "message": "not found", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/ghost/branches", + "auth": "carol", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-upload-pack", + "auth": "carol-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost.git/info/refs?service=git-receive-pack", + "auth": "carol-tokbasic", + "status": 403, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Push to create is not enabled for organizations.", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis", + "auth": "none", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login?redirect_to=%2Facme%2Fvis" + }, + "body_text": "<a href=\"/user/login?redirect_to=%2Facme%2Fvis\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-vis-none", + "cmd": "git ls-remote <base>/acme/vis.git", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost", + "auth": "none", + "status": 303, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/user/login?redirect_to=%2Facme%2Fghost" + }, + "body_text": "<a href=\"/user/login?redirect_to=%2Facme%2Fghost\">See Other</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-ghost-none", + "cmd": "git ls-remote <base>/acme/ghost.git", + "ok": false, + "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/vis", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Not found.\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-vis-dave", + "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/ghost", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Not found.\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-ghost-dave", + "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", + "ok": false, + "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "9" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 44, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 20, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#5>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#6>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#7>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 9, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#8>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#9>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "13" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#3>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "doomed", + "full_name": "acme/doomed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/doomed/languages", + "html_url": "<base>/acme/doomed", + "url": "<base>/api/v1/repos/acme/doomed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "clone_url": "<base>/acme/doomed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#4>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "empty", + "full_name": "acme/empty", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/empty/languages", + "html_url": "<base>/acme/empty", + "url": "<base>/api/v1/repos/acme/empty", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "clone_url": "<base>/acme/empty.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#5>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#6>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 44, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 20, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#7>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#8>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#9>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 9, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#10>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#11>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#12>", + "owner": { + "id": "<id:data.owner.id#2>", + "login": "alice", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "scoped", + "full_name": "alice/scoped", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/scoped/languages", + "html_url": "<base>/alice/scoped", + "url": "<base>/api/v1/repos/alice/scoped", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "clone_url": "<base>/alice/scoped.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#13>", + "owner": { + "id": "<id:data.owner.id#3>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "", + "email": "admin@example.invalid", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "name": "probe", + "full_name": "<admin>/probe", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/<admin>/probe/languages", + "html_url": "<base>/<admin>/probe", + "url": "<base>/api/v1/repos/<admin>/probe", + "link": "", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "clone_url": "<base>/<admin>/probe.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=vis&limit=50", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user/repos?limit=50", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "url": "<base>/api/swagger", + "errors": null, + "message": "HasOrgOrUserVisible" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "11" + }, + "body": [] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos?limit=50", + "auth": "carol", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "11" + }, + "body": [ + { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "alpha", + "full_name": "acme/alpha", + "description": "Alpha repo", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/alpha/languages", + "html_url": "<base>/acme/alpha", + "url": "<base>/api/v1/repos/acme/alpha", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "clone_url": "<base>/acme/alpha.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#2>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "blank", + "full_name": "acme/blank", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/blank/languages", + "html_url": "<base>/acme/blank", + "url": "<base>/api/v1/repos/acme/blank", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "clone_url": "<base>/acme/blank.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#3>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "hist", + "full_name": "acme/hist", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Rust", + "languages_url": "<base>/api/v1/repos/acme/hist/languages", + "html_url": "<base>/acme/hist", + "url": "<base>/api/v1/repos/acme/hist", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "clone_url": "<base>/acme/hist.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#4>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prs", + "full_name": "acme/prs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/prs/languages", + "html_url": "<base>/acme/prs", + "url": "<base>/api/v1/repos/acme/prs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "clone_url": "<base>/acme/prs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#5>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "merges", + "full_name": "acme/merges", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 44, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/merges/languages", + "html_url": "<base>/acme/merges", + "url": "<base>/api/v1/repos/acme/merges", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "clone_url": "<base>/acme/merges.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 20, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#6>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#7>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "prot", + "full_name": "acme/prot", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/prot/languages", + "html_url": "<base>/acme/prot", + "url": "<base>/api/v1/repos/acme/prot", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "clone_url": "<base>/acme/prot.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#8>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "smart", + "full_name": "acme/smart", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/smart/languages", + "html_url": "<base>/acme/smart", + "url": "<base>/api/v1/repos/acme/smart", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "clone_url": "<base>/acme/smart.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 9, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:id#9>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "vis", + "full_name": "acme/vis", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/vis/languages", + "html_url": "<base>/acme/vis", + "url": "<base>/api/v1/repos/acme/vis", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "clone_url": "<base>/acme/vis.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": false, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/acme/repos?limit=50", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json new file mode 100644 index 00000000..15a8b115 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json @@ -0,0 +1,1189 @@ +{ + "scenario": "L", + "title": "force-private", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "pub1", + "private": false, + "auto_init": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pub1", + "auth": "admin", + "status": 200, + "request": { + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pub1", + "full_name": "acme/pub1", + "description": "", + "empty": false, + "private": false, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pub1/languages", + "html_url": "<base>/acme/pub1", + "url": "<base>/api/v1/repos/acme/pub1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "clone_url": "<base>/acme/pub1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": true, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "nodef", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "nodef", + "full_name": "acme/nodef", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/nodef/languages", + "html_url": "<base>/acme/nodef", + "url": "<base>/api/v1/repos/acme/nodef", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "clone_url": "<base>/acme/nodef.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice", + "status": 201, + "request": { + "name": "pub2", + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "pub2", + "full_name": "alice/pub2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/pub2/languages", + "html_url": "<base>/alice/pub2", + "url": "<base>/api/v1/repos/alice/pub2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "clone_url": "<base>/alice/pub2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/pub2", + "auth": "none", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Only signed in user is allowed to call APIs." + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/pub2", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/user/repos", + "auth": "alice", + "status": 201, + "request": { + "name": "nodef2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "alice", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "alice@example.invalid", + "avatar_url": "<base>/avatars/43fcab1f4245d31e85b194dc2836a67d", + "html_url": "<base>/alice", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "alice" + }, + "name": "nodef2", + "full_name": "alice/nodef2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/alice/nodef2/languages", + "html_url": "<base>/alice/nodef2", + "url": "<base>/api/v1/repos/alice/nodef2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "clone_url": "<base>/alice/nodef2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "pubco", + "visibility": "public" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "pubco", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "pubco" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/pubco", + "auth": "dave", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "pubco", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "pubco" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/pubco/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "pubrepo", + "private": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "pubco", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/e91cac257d9e29ee204956121e39ba8d", + "html_url": "<base>/pubco", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "pubco" + }, + "name": "pubrepo", + "full_name": "pubco/pubrepo", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/pubco/pubrepo/languages", + "html_url": "<base>/pubco/pubrepo", + "url": "<base>/api/v1/repos/pubco/pubrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "clone_url": "<base>/pubco/pubrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/pubco/pubrepo", + "auth": "dave", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/M-names.json b/crates/forge/conformance/fixtures/1.26.2/M-names.json new file mode 100644 index 00000000..3e8b77ca --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/M-names.json @@ -0,0 +1,2400 @@ +{ + "scenario": "M", + "title": "names", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "Mixed", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "mixed", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 409, + "request": { + "name": "MIXED", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The repository with the same name already exists.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/Mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/ACME/mixed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Mixed", + "full_name": "acme/Mixed", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Mixed/languages", + "html_url": "<base>/acme/Mixed", + "url": "<base>/api/v1/repos/acme/Mixed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "clone_url": "<base>/acme/Mixed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": ".", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: .]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 500, + "request": { + "name": "..", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is invalid [..]: must be valid alpha or numeric or dash(-_) or dot characters", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": ".hidden", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": ".hidden", + "full_name": "acme/.hidden", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/.hidden/languages", + "html_url": "<base>/acme/.hidden", + "url": "<base>/api/v1/repos/acme/.hidden", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "clone_url": "<base>/acme/.hidden.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "-dash", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "-dash", + "full_name": "acme/-dash", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/-dash/languages", + "html_url": "<base>/acme/-dash", + "url": "<base>/api/v1/repos/acme/-dash", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "clone_url": "<base>/acme/-dash.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "trail.git", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.git]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "wiki.wiki", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.wiki]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "feed.rss", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.rss]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "feed.atom", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name pattern is not allowed [pattern: *.atom]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "a b", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: AlphaDashDot", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 500, + "request": { + "name": "a..b", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is invalid [a..b]: must be valid alpha or numeric or dash(-_) or dot characters", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "api", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "api", + "full_name": "acme/api", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/api/languages", + "html_url": "<base>/acme/api", + "url": "<base>/api/v1/repos/acme/api", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "clone_url": "<base>/acme/api.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "admin", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "admin", + "full_name": "acme/admin", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/admin/languages", + "html_url": "<base>/acme/admin", + "url": "<base>/api/v1/repos/acme/admin", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "clone_url": "<base>/acme/admin.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "user", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "user", + "full_name": "acme/user", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/user/languages", + "html_url": "<base>/acme/user", + "url": "<base>/api/v1/repos/acme/user", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "clone_url": "<base>/acme/user.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "assets", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "assets", + "full_name": "acme/assets", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/assets/languages", + "html_url": "<base>/acme/assets", + "url": "<base>/api/v1/repos/acme/assets", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "clone_url": "<base>/acme/assets.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: MaxSize", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "ok_name-1.x", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "ok_name-1.x", + "full_name": "acme/ok_name-1.x", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/ok_name-1.x/languages", + "html_url": "<base>/acme/ok_name-1.x", + "url": "<base>/api/v1/repos/acme/ok_name-1.x", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "clone_url": "<base>/acme/ok_name-1.x.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 422, + "request": { + "name": "\u00fcn\u00ef", + "auto_init": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: AlphaDashDot", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "Acme" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: Acme]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "api" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: api]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "admin" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "admin", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/21232f297a57a5a743894a0e4a801fc3", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "admin" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "user" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "assets" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: assets]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "explore" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: explore]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": ".dot" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "-dash" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "has space" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 201, + "request": { + "username": "org.git" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "org.git", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/db2a58818a04fc2a8bf33359a138ef56", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "org.git" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "admin", + "status": 422, + "request": { + "username": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[UserName]: MaxSize", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "Alice", + "email": "Alice@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user already exists [name: Alice]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "api", + "email": "api@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: api]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "user", + "email": "user@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "name is reserved [name: user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "-lead", + "email": "-lead@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": ".lead", + "email": ".lead@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 201, + "request": { + "username": "trail.git", + "email": "trail.git@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "trail.git", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "trail.git@example.invalid", + "avatar_url": "<base>/avatars/3ce0652da723aaa0dc714e724efb8034", + "html_url": "<base>/trail.git", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "trail.git" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/admin/users", + "auth": "admin", + "status": 422, + "request": { + "username": "bad name", + "email": "badname@example.invalid", + "password": "<token>", + "must_change_password": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Username]: invalid username", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/repos", + "auth": "admin", + "status": 201, + "request": { + "name": "rename-me", + "auto_init": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "rename-me", + "full_name": "acme/rename-me", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/rename-me/languages", + "html_url": "<base>/acme/rename-me", + "url": "<base>/api/v1/repos/acme/rename-me", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "clone_url": "<base>/acme/rename-me.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/rename-me", + "auth": "admin", + "status": 200, + "request": { + "name": "renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/rename-me", + "auth": "admin", + "status": 301, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/api/v1/repos/acme/renamed" + }, + "body_text": "<a href=\"/api/v1/repos/acme/renamed\">Moved Permanently</a>.\n\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/rename-me", + "auth": "dave", + "status": 301, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/api/v1/repos/acme/renamed" + }, + "body_text": "<a href=\"/api/v1/repos/acme/renamed\">Moved Permanently</a>.\n\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/rename-me.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 301, + "headers": { + "content-type": "text/html;charset=utf-8", + "location": "/acme/renamed/info/refs?service=git-upload-pack" + }, + "body_text": "<a href=\"/acme/renamed/info/refs?service=git-upload-pack\">Moved Permanently</a>.\n\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "git", + "name": "ls-remote-old-name", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/rename-me.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main\nwarning: redirecting to <base>/acme/renamed/" + }, + { + "kind": "git", + "name": "ls-remote-new-name", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/renamed.git", + "ok": true, + "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 422, + "request": { + "name": "mixed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "repository already exists [uname: acme, name: mixed]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/renamed", + "auth": "admin", + "status": 200, + "request": { + "name": "Renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "Renamed", + "full_name": "acme/Renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/Renamed/languages", + "html_url": "<base>/acme/Renamed", + "url": "<base>/api/v1/repos/acme/Renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "clone_url": "<base>/acme/Renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/Renamed", + "auth": "admin", + "status": 200, + "request": { + "name": "renamed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "renamed", + "full_name": "acme/renamed", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/renamed/languages", + "html_url": "<base>/acme/renamed", + "url": "<base>/api/v1/repos/acme/renamed", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "clone_url": "<base>/acme/renamed.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json new file mode 100644 index 00000000..09d9c4ce --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json @@ -0,0 +1,1281 @@ +{ + "scenario": "N", + "title": "default-branch", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "nope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "dev" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "dev", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "dev", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "git", + "name": "ls-remote-symref-after-change", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/dflt.git HEAD", + "ok": true, + "output": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "2" + }, + "body": [ + { + "name": "dev", + "commit": { + "id": "<sha#1>", + "message": "commit on dev\n", + "url": "<base>/acme/dflt/commit/<sha#1>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#2>", + "message": "Initial commit\n", + "url": "<base>/acme/dflt/commit/<sha#2>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/dflt/contents", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "name": "README.md", + "path": "README.md", + "sha": "<sha#3>", + "last_commit_sha": "<sha#2>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 8, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/dflt/contents/README.md?ref=dev", + "html_url": "<base>/acme/dflt/src/branch/dev/README.md", + "git_url": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#3>", + "download_url": "<base>/acme/dflt/raw/branch/dev/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/dflt/contents/README.md?ref=dev", + "git": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#3>", + "html": "<base>/acme/dflt/src/branch/dev/README.md" + } + }, + { + "name": "dev.txt", + "path": "dev.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#1>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": null, + "content": null, + "target": null, + "url": "<base>/api/v1/repos/acme/dflt/contents/dev.txt?ref=dev", + "html_url": "<base>/acme/dflt/src/branch/dev/dev.txt", + "git_url": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#4>", + "download_url": "<base>/acme/dflt/raw/branch/dev/dev.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/dflt/contents/dev.txt?ref=dev", + "git": "<base>/api/v1/repos/acme/dflt/git/blobs/<sha#4>", + "html": "<base>/acme/dflt/src/branch/dev/dev.txt" + } + } + ] + }, + { + "kind": "git", + "name": "clone-after-change", + "cmd": "git clone -q http://<admin>:<token>@<host>/acme/dflt.git <tmp>/ndflt", + "ok": true, + "output": "" + }, + { + "kind": "note", + "key": "clone_checked_out_branch", + "value": "dev", + "strict": true + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/dflt", + "auth": "admin", + "status": 200, + "request": { + "default_branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "dflt", + "full_name": "acme/dflt", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/dflt/languages", + "html_url": "<base>/acme/dflt", + "url": "<base>/api/v1/repos/acme/dflt", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "clone_url": "<base>/acme/dflt.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/dflt/branches/dev", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh1", + "full_name": "acme/fresh1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", + "html_url": "<base>/acme/fresh1", + "url": "<base>/api/v1/repos/acme/fresh1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "clone_url": "<base>/acme/fresh1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh1", + "full_name": "acme/fresh1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", + "html_url": "<base>/acme/fresh1", + "url": "<base>/api/v1/repos/acme/fresh1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "clone_url": "<base>/acme/fresh1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "git", + "name": "ls-remote-symref-trunk-first", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", + "ok": true, + "output": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh1/branches", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": null + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh2", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh2", + "full_name": "acme/fresh2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh2/languages", + "html_url": "<base>/acme/fresh2", + "url": "<base>/api/v1/repos/acme/fresh2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "clone_url": "<base>/acme/fresh2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "develop", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "develop", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "git", + "name": "ls-remote-symref-main-pushed-first", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "ok": true, + "output": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/fresh3", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "fresh3", + "full_name": "acme/fresh3", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "Text", + "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", + "html_url": "<base>/acme/fresh3", + "url": "<base>/api/v1/repos/acme/fresh3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "clone_url": "<base>/acme/fresh3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "git", + "name": "ls-remote-symref-develop-pushed-second", + "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "ok": true, + "output": "ref: refs/heads/develop\tHEAD\n<sha#5>\tHEAD" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json new file mode 100644 index 00000000..06291668 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json @@ -0,0 +1,3532 @@ +{ + "scenario": "O", + "title": "pr-head-lifecycle", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "force_push_head_sha_follows", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "git", + "name": "ls-remote-pull-refs", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "ok": true, + "output": "<sha#3>\trefs/pull/1/head" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/life/branches/l2", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l2", + "body": "body l2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/2", + "diff_url": "<base>/acme/life/pulls/2.diff", + "patch_url": "<base>/acme/life/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l2", + "ref": "refs/pull/2/head", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls?state=open&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l1", + "body": "body l1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/life/pulls/1", + "diff_url": "<base>/acme/life/pulls/1.diff", + "patch_url": "<base>/acme/life/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l1", + "ref": "l1", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 404, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l2", + "body": "body l2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/2", + "diff_url": "<base>/acme/life/pulls/2.diff", + "patch_url": "<base>/acme/life/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l2", + "ref": "refs/pull/2/head", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "git", + "name": "ls-remote-pull-refs-after-delete", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "ok": true, + "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>/commits", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>", + "html_url": "<base>/acme/life/commit/<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "date": "<ts>" + }, + "message": "add l2\n", + "tree": { + "url": "<base>/api/v1/repos/acme/life/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + }, + "author": null, + "committer": null, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/life/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "files": [ + { + "filename": "l2.txt", + "status": "added" + } + ], + "stats": { + "total": 1, + "additions": 1, + "deletions": 0 + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#2>.diff", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "diff --git a/l2.txt b/l2.txt\nnew file mode 100644\nindex <short>..<short>\n--- /dev/null\n+++ b/l2.txt\n@@ -0,0 +1 @@\n+2\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l3", + "body": "body l3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/life/pulls/3", + "diff_url": "<base>/acme/life/pulls/3.diff", + "patch_url": "<base>/acme/life/pulls/3.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#5>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l3", + "ref": "l3", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "merged_pr_head_sha_frozen", + "value": false, + "strict": true + }, + { + "kind": "note", + "key": "merged_pr_head_sha_follows_new_branch", + "value": true, + "strict": true + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l4", + "ref": "l4", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/life/branches/l4", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "open" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l4", + "body": "body l4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/life/pulls/4", + "diff_url": "<base>/acme/life/pulls/4.diff", + "patch_url": "<base>/acme/life/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l4", + "ref": "refs/pull/4/head", + "sha": "<sha#7>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 26, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "note", + "key": "direct_push_marks_pr_merged", + "value": false, + "strict": true + }, + { + "kind": "note", + "key": "direct_push_seconds_to_detect", + "value": 15, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#5>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/life/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR l5", + "body": "body l5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/life/pulls/5", + "diff_url": "<base>/acme/life/pulls/5.diff", + "patch_url": "<base>/acme/life/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "l5", + "ref": "l5", + "sha": "<sha#8>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "life", + "full_name": "acme/life", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 27, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/life/languages", + "html_url": "<base>/acme/life", + "url": "<base>/api/v1/repos/acme/life", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "clone_url": "<base>/acme/life.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#8>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/life/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json new file mode 100644 index 00000000..185271dc --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json @@ -0,0 +1,15919 @@ +{ + "scenario": "P", + "title": "pagination", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"first\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=1&state=all>; rel=\"first\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=0", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=2&page=-1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=2&state=all>; rel=\"next\",<<base>/api/v1/repos/acme/pages/pulls?limit=2&page=3&state=all>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=0", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_0_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=100", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_100_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=51", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_51_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=50", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_50_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=-1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "note", + "key": "pulls_limit_-1_count", + "value": 5, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&limit=abc", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=oldest&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=newest&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/pulls?state=all&sort=recentupdate&limit=5", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5" + }, + "body": [ + { + "id": "<id:id#1>", + "url": "<base>/acme/pages/pulls/5", + "number": 5, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 5", + "body": "body pg5", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/5", + "diff_url": "<base>/acme/pages/pulls/5.diff", + "patch_url": "<base>/acme/pages/pulls/5.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg5", + "ref": "pg5", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#2>", + "url": "<base>/acme/pages/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 4", + "body": "body pg4", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/4", + "diff_url": "<base>/acme/pages/pulls/4.diff", + "patch_url": "<base>/acme/pages/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg4", + "ref": "pg4", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#3>", + "url": "<base>/acme/pages/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 3", + "body": "body pg3", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/3", + "diff_url": "<base>/acme/pages/pulls/3.diff", + "patch_url": "<base>/acme/pages/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg3", + "ref": "pg3", + "sha": "<sha#4>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#4>", + "url": "<base>/acme/pages/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 2", + "body": "body pg2", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/2", + "diff_url": "<base>/acme/pages/pulls/2.diff", + "patch_url": "<base>/acme/pages/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg2", + "ref": "pg2", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + { + "id": "<id:id#5>", + "url": "<base>/acme/pages/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR 1", + "body": "body pg1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": null, + "requested_reviewers": null, + "requested_reviewers_teams": null, + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "html_url": "<base>/acme/pages/pulls/1", + "diff_url": "<base>/acme/pages/pulls/1.diff", + "patch_url": "<base>/acme/pages/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "pg1", + "ref": "pg1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 6, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"last\"" + }, + "body": [ + { + "name": "pg5", + "commit": { + "id": "<sha#2>", + "message": "add pg5\n", + "url": "<base>/acme/pages/commit/<sha#2>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "pg4", + "commit": { + "id": "<sha#3>", + "message": "add pg4\n", + "url": "<base>/acme/pages/commit/<sha#3>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"prev\"" + }, + "body": [ + { + "name": "pg3", + "commit": { + "id": "<sha#4>", + "message": "add pg3\n", + "url": "<base>/acme/pages/commit/<sha#4>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "pg2", + "commit": { + "id": "<sha#5>", + "message": "add pg2\n", + "url": "<base>/acme/pages/commit/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"prev\"" + }, + "body": [ + { + "name": "pg1", + "commit": { + "id": "<sha#6>", + "message": "add pg1\n", + "url": "<base>/acme/pages/commit/<sha#6>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + }, + { + "name": "main", + "commit": { + "id": "<sha#1>", + "message": "Initial commit\n", + "url": "<base>/acme/pages/commit/<sha#1>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "username": "<admin>" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/branches?limit=2&page=4", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "6", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=2&page=2>; rel=\"prev\"" + }, + "body": [] + }, + { + "kind": "note", + "key": "branches_default_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches_default_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=100_count", + "value": 50, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=100_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=100&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=100&page=2>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=51_count", + "value": 50, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=51_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=51&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=51&page=2>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=0_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=0_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=0&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?limit=0&page=3>; rel=\"last\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?page=2_count", + "value": 30, + "strict": true + }, + { + "kind": "note", + "key": "branches?page=2_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/branches?page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/branches?page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?page=1>; rel=\"prev\"" + }, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=50&page=2_count", + "value": 11, + "strict": true + }, + { + "kind": "note", + "key": "branches?limit=50&page=2_headers", + "value": { + "x-total-count": "61", + "link": "<<base>/api/v1/repos/acme/pages/branches?limit=50&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/branches?limit=50&page=1>; rel=\"prev\"" + }, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=3", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/statuses?limit=2&page=2>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s1", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2>; rel=\"last\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#3>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/statuses/<sha#1>?limit=3&page=1>; rel=\"prev\"" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s1", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=1", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=2>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=3>; rel=\"last\"" + }, + "body": { + "state": "success", + "sha": "<sha#1>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s4", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s5", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 61, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/pages/commits/<sha#1>", + "url": "<base>/api/v1/repos/acme/pages/commits/<sha#1>/status" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=2", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "5", + "link": "<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=3>; rel=\"next\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=3>; rel=\"last\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=1>; rel=\"first\",<<base>/api/v1/repos/acme/pages/commits/<sha#1>/status?limit=2&page=1>; rel=\"prev\"" + }, + "body": { + "state": "success", + "sha": "<sha#1>", + "total_count": 2, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s2", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + }, + { + "id": "<id:statuses.id#2>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/pages/statuses/<sha#1>", + "context": "s3", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pages", + "full_name": "acme/pages", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pages/languages", + "html_url": "<base>/acme/pages", + "url": "<base>/api/v1/repos/acme/pages", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "clone_url": "<base>/acme/pages.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 61, + "open_issues_count": 0, + "open_pr_counter": 5, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/pages/commits/<sha#1>", + "url": "<base>/api/v1/repos/acme/pages/commits/<sha#1>/status" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=1&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=2&q=pgrepo&sort=alpha>; rel=\"next\",<<base>/api/v1/repos/search?limit=2&page=2&q=pgrepo&sort=alpha>; rel=\"last\"" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo1", + "full_name": "acme/pgrepo1", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo1/languages", + "html_url": "<base>/acme/pgrepo1", + "url": "<base>/api/v1/repos/acme/pgrepo1", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "clone_url": "<base>/acme/pgrepo1.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + { + "id": "<id:data.id#2>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo2", + "full_name": "acme/pgrepo2", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo2/languages", + "html_url": "<base>/acme/pgrepo2", + "url": "<base>/api/v1/repos/acme/pgrepo2", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "clone_url": "<base>/acme/pgrepo2.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=2&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"first\",<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"prev\"" + }, + "body": { + "ok": true, + "data": [ + { + "id": "<id:data.id#1>", + "owner": { + "id": "<id:data.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:data.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "pgrepo3", + "full_name": "acme/pgrepo3", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/pgrepo3/languages", + "html_url": "<base>/acme/pgrepo3", + "url": "<base>/api/v1/repos/acme/pgrepo3", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "clone_url": "<base>/acme/pgrepo3.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?q=pgrepo&limit=2&page=3&sort=alpha", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3", + "link": "<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"first\",<<base>/api/v1/repos/search?limit=2&page=1&q=pgrepo&sort=alpha>; rel=\"prev\"" + }, + "body": { + "ok": true, + "data": [] + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json b/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json new file mode 100644 index 00000000..618d85bd --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json @@ -0,0 +1,431 @@ +{ + "scenario": "Q", + "title": "protection-bypass", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viaapi.txt", + "auth": "bot", + "status": 403, + "request": { + "content": "eAo=", + "message": "api to main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: bot]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viaapi-admin.txt", + "auth": "admin", + "status": 403, + "request": { + "content": "eAo=", + "message": "api to main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: <admin>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/bypass/contents/README.md", + "auth": "bot", + "status": 403, + "request": { + "content": "Y2hhbmdlZAo=", + "message": "put to main", + "sha": "<sha#1>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user cannot commit to repo [user: bot]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/contents/viapr.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "api new branch", + "branch": "main", + "new_branch": "q-api" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "viapr.txt", + "path": "viapr.txt", + "sha": "<sha#5>", + "last_commit_sha": "<sha#2>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/bypass/contents/viapr.txt?ref=q-api", + "html_url": "<base>/acme/bypass/src/branch/q-api/viapr.txt", + "git_url": "<base>/api/v1/repos/acme/bypass/git/blobs/<sha#5>", + "download_url": "<base>/acme/bypass/raw/branch/q-api/viapr.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/bypass/contents/viapr.txt?ref=q-api", + "git": "<base>/api/v1/repos/acme/bypass/git/blobs/<sha#5>", + "html": "<base>/acme/bypass/src/branch/q-api/viapr.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/bypass/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>", + "html_url": "<base>/acme/bypass/commit/<sha#2>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/bypass/git/commits/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + ], + "message": "api new branch\n", + "tree": { + "url": "<base>/api/v1/repos/acme/bypass/git/trees/<sha#4>", + "sha": "<sha#4>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/bypass/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "git", + "name": "push-unprotected-branch", + "cmd": "git push origin HEAD:refs/heads/fp1", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'fp1': \nremote: <base>/acme/bypass/pulls/new/fp1 \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/bypass.git\n * [new branch] HEAD -> fp1" + }, + { + "kind": "git", + "name": "force-push-unprotected-branch", + "cmd": "git push -f origin HEAD:refs/heads/fp1", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'fp1': \nremote: <base>/acme/bypass/pulls/new/fp1 \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/bypass.git\n + <short>..<short> HEAD -> fp1 (forced update)" + }, + { + "kind": "git", + "name": "nonff-protected-push-disabled", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "nonff-protected-push-enabled", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": false, + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "force-protected-push-enabled", + "cmd": "git push -f origin HEAD:refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: branch main is protected from force push \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "git", + "name": "delete-protected-push-enabled", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_push": false + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "git", + "name": "delete-protected-push-disabled", + "cmd": "git push origin :refs/heads/main", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "admin", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "can not delete default or pull request target branch", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "bot", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "can not delete default or pull request target branch", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/bypass/branches/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "name": "main", + "commit": { + "id": "<sha#6>", + "message": "Merge pull request 'PR q1' (#1) from q1 into main\n", + "url": "<base>/acme/bypass/commit/<sha#6>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "username": "bot" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "username": "bot" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": true, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": null, + "user_can_push": false, + "user_can_merge": true, + "effective_branch_protection_name": "main" + } + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/bypass/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json new file mode 100644 index 00000000..990b88a0 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json @@ -0,0 +1,549 @@ +{ + "scenario": "R", + "title": "token-scope-edges", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "po", + "scopes": [ + "public-only", + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "po", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "public-only", + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2", + "auth": "alice-po", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "alice-po", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:user], token scope=public-only,read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/search?limit=50", + "auth": "alice-po", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "0" + }, + "body": { + "ok": true, + "data": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro", + "status": 403, + "request": { + "name": "via-ro", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:user], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice", + "status": 401, + "request": { + "name": "via-all-token", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "auth required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-tokpw", + "status": 201, + "request": { + "name": "via-token-as-password", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "via-token-as-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-tokpw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "4" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "via-token-as-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#2>", + "name": "po", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "public-only", + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#3>", + "name": "ci", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#4>", + "name": "all", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "all" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + ], + "volatile": [ + "id", + "name", + "scopes" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "alice-pw-on-bot", + "status": 403, + "request": { + "name": "stolen", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "doer should be the site admin or be same as the contextUser", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/bot/tokens", + "auth": "alice-pw-on-bot", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "doer should be the site admin or be same as the contextUser", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "badscope", + "scopes": [ + "nonsense" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid access token scope provided: invalid access token scope: nonsense", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 400, + "request": { + "name": "noscope" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "access token must have a scope", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 422, + "request": { + "name": "", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "[Name]: Required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-basic", + "status": 201, + "request": { + "name": "wo", + "scopes": [ + "write:organization" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "wo", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "write:organization" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs", + "auth": "bot", + "status": 201, + "request": { + "username": "botorg" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "botorg", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "botorg" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "alice-wo", + "status": 403, + "request": { + "name": "intruder" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "User is not allowed to create repositories in this organization.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "alice", + "status": 403, + "request": { + "name": "intruder" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "User is not allowed to create repositories in this organization.", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/botorg/repos", + "auth": "bot", + "status": 201, + "request": { + "name": "legit" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "botorg", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "html_url": "<base>/botorg", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "botorg" + }, + "name": "legit", + "full_name": "botorg/legit", + "description": "", + "empty": true, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 22, + "language": "", + "languages_url": "<base>/api/v1/repos/botorg/legit/languages", + "html_url": "<base>/botorg/legit", + "url": "<base>/api/v1/repos/botorg/legit", + "link": "", + "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "clone_url": "<base>/botorg/legit.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 0, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/orgs/botorg", + "auth": "alice-wo", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "botorg", + "full_name": "", + "email": "", + "avatar_url": "<base>/avatars/84298c4e18cd2b2b34f8e2c84fc22bb3", + "description": "", + "website": "", + "location": "", + "visibility": "public", + "repo_admin_change_team_access": false, + "username": "botorg" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2", + "auth": "alice-wo", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:repository], token scope=write:organization", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/alice/scoped2/branches", + "auth": "bot-scoped", + "status": 404, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "not found", + "url": "<base>/api/swagger", + "errors": null + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json new file mode 100644 index 00000000..1d2c98ae --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json @@ -0,0 +1,518 @@ +{ + "scenario": "S", + "title": "ref-pushes", + "error": null, + "exchanges": [ + { + "kind": "git", + "name": "bot-push-replace-ref", + "cmd": "git push origin <sha#1>:refs/replace/<sha#2>", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/replace/<sha#2>" + }, + { + "kind": "git", + "name": "bot-push-pull-1-head", + "cmd": "git push origin <sha#1>:refs/pull/1/head", + "ok": false, + "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + }, + { + "kind": "git", + "name": "bot-push-pull-1-head-forced", + "cmd": "git push origin +<sha#1>:refs/pull/1/head", + "ok": false, + "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-pull-999-head", + "cmd": "git push origin <sha#1>:refs/pull/999/head", + "ok": false, + "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-heads-pull-1-head", + "cmd": "git push origin <sha#1>:refs/heads/pull/1/head", + "ok": true, + "output": "remote: \nremote: Create a new pull request for 'pull/1/head': \nremote: <base>/acme/refs/pulls/new/pull/1/head \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new branch] <sha#1> -> pull/1/head" + }, + { + "kind": "git", + "name": "bot-push-lightweight-tag", + "cmd": "git push origin <sha#1>:refs/tags/v-bot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new tag] <sha#1> -> v-bot" + }, + { + "kind": "git", + "name": "bot-push-annotated-tag", + "cmd": "git push origin refs/tags/annot:refs/tags/annot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new tag] annot -> annot" + }, + { + "kind": "git", + "name": "bot-push-notes-ref", + "cmd": "git push origin <sha#1>:refs/notes/commits", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/notes/commits" + }, + { + "kind": "git", + "name": "bot-push-for-ref", + "cmd": "git push origin <sha#1>:refs/for/main", + "ok": false, + "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "bot-push-changes-ref", + "cmd": "git push origin <sha#1>:refs/changes/1/2", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/changes/1/2" + }, + { + "kind": "git", + "name": "bot-push-keep-around-ref", + "cmd": "git push origin <sha#1>:refs/keep-around/<sha#1>", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/keep-around/<sha#1>" + }, + { + "kind": "git", + "name": "bot-push-arbitrary-ref", + "cmd": "git push origin <sha#1>:refs/custom/thing", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n * [new reference] <sha#1> -> refs/custom/thing" + }, + { + "kind": "git", + "name": "bot-push-tag-delete", + "cmd": "git push origin :refs/tags/v-bot", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/refs.git\n - [deleted] v-bot" + }, + { + "kind": "git", + "name": "read-collab-push-tag", + "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", + "ok": false, + "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + }, + { + "kind": "git", + "name": "ls-remote-all-refs", + "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/refs.git", + "ok": true, + "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/git/refs", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": [ + { + "ref": "refs/changes/1/2", + "url": "<base>/api/v1/repos/acme/refs/git/refs/changes/1/2", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/custom/thing", + "url": "<base>/api/v1/repos/acme/refs/git/refs/custom/thing", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/main", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/main", + "object": { + "type": "commit", + "sha": "<sha#3>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#3>" + } + }, + { + "ref": "refs/heads/pull/1/head", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/pull/1/head", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/heads/r1", + "url": "<base>/api/v1/repos/acme/refs/git/refs/heads/r1", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#2>" + } + }, + { + "ref": "refs/keep-around/<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/refs/keep-around/<sha#1>", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/notes/commits", + "url": "<base>/api/v1/repos/acme/refs/git/refs/notes/commits", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/pull/1/head", + "url": "<base>/api/v1/repos/acme/refs/git/refs/pull/1/head", + "object": { + "type": "commit", + "sha": "<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#2>" + } + }, + { + "ref": "refs/replace/<sha#2>", + "url": "<base>/api/v1/repos/acme/refs/git/refs/replace/<sha#2>", + "object": { + "type": "commit", + "sha": "<sha#1>", + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#1>" + } + }, + { + "ref": "refs/tags/annot", + "url": "<base>/api/v1/repos/acme/refs/git/refs/tags/annot", + "object": { + "type": "tag", + "sha": "<sha#4>", + "url": "<base>/api/v1/repos/acme/refs/git/tags/<sha#4>" + } + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/tags", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "name": "annot", + "message": "annotated", + "id": "<sha#4>", + "commit": { + "url": "<base>/api/v1/repos/acme/refs/git/commits/<sha#4>", + "sha": "<sha#1>", + "created": "<ts>" + }, + "zipball_url": "<base>/acme/refs/archive/annot.zip", + "tarball_url": "<base>/acme/refs/archive/annot.tar.gz" + } + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/refs/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/refs/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR r1", + "body": "body r1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/refs/pulls/1", + "diff_url": "<base>/acme/refs/pulls/1.diff", + "patch_url": "<base>/acme/refs/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#3>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "refs", + "full_name": "acme/refs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/refs/languages", + "html_url": "<base>/acme/refs", + "url": "<base>/api/v1/repos/acme/refs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "clone_url": "<base>/acme/refs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "r1", + "ref": "r1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "refs", + "full_name": "acme/refs", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/refs/languages", + "html_url": "<base>/acme/refs", + "url": "<base>/api/v1/repos/acme/refs", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "clone_url": "<base>/acme/refs.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json new file mode 100644 index 00000000..1567919a --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json @@ -0,0 +1,4086 @@ +{ + "scenario": "T", + "title": "merge-outcomes", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "unrelated", + "head": "orph", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 3, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 3, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 409, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body_text": "", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "unrelated", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 3, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/1", + "diff_url": "<base>/acme/outcomes/pulls/1.diff", + "patch_url": "<base>/acme/outcomes/pulls/1.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "orph", + "ref": "orph", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "same tree", + "head": "tid", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#2>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/2", + "number": 2, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "same tree", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/2", + "diff_url": "<base>/acme/outcomes/pulls/2.diff", + "patch_url": "<base>/acme/outcomes/pulls/2.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#4>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#4>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "tid", + "ref": "tid", + "sha": "<sha#3>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 3, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#1>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls", + "auth": "bot-scoped", + "status": 201, + "request": { + "title": "contained", + "head": "cont", + "base": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 24, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 1, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + }, + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#3>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/3", + "number": 3, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "contained", + "body": "", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 0, + "deletions": 0, + "changed_files": 0, + "html_url": "<base>/acme/outcomes/pulls/3", + "diff_url": "<base>/acme/outcomes/pulls/3.diff", + "patch_url": "<base>/acme/outcomes/pulls/3.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cont", + "ref": "cont", + "sha": "<sha#5>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 4, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ok1", + "body": "body ok1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/4", + "diff_url": "<base>/acme/outcomes/pulls/4.diff", + "patch_url": "<base>/acme/outcomes/pulls/4.patch", + "mergeable": true, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#5>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "ok1", + "ref": "ok1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/4", + "number": 4, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR ok1", + "body": "body ok1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 2, + "deletions": 0, + "changed_files": 2, + "html_url": "<base>/acme/outcomes/pulls/4", + "diff_url": "<base>/acme/outcomes/pulls/4.diff", + "patch_url": "<base>/acme/outcomes/pulls/4.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#7>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#7>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "ok1", + "ref": "ok1", + "sha": "<sha#6>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 5, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#5>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "The PR is already merged", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#5>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "note", + "key": "conflicting_pr_mergeable_after_8s", + "value": false, + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "open", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 3, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": null, + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Please try again later", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 201, + "request": { + "state": "closed" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/outcomes/pulls/6", + "number": 6, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR cfb", + "body": "body cfb", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 1, + "changed_files": 1, + "html_url": "<base>/acme/outcomes/pulls/6", + "diff_url": "<base>/acme/outcomes/pulls/6.diff", + "patch_url": "<base>/acme/outcomes/pulls/6.patch", + "mergeable": false, + "merged": false, + "merged_at": null, + "merge_commit_sha": null, + "merged_by": null, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#8>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "cfb", + "ref": "cfb", + "sha": "<sha#9>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "outcomes", + "full_name": "acme/outcomes", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 29, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", + "html_url": "<base>/acme/outcomes", + "url": "<base>/api/v1/repos/acme/outcomes", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "clone_url": "<base>/acme/outcomes.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 8, + "open_issues_count": 0, + "open_pr_counter": 2, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#10>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json new file mode 100644 index 00000000..c4f9dda5 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json @@ -0,0 +1,529 @@ +{ + "scenario": "U", + "title": "status-check-edges", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": false, + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": false, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#1>", + "auth": "bot-scoped", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "url": "<base>/acme/checks/pulls/1", + "number": 1, + "user": { + "id": "<id:user.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:user.source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "title": "PR u1", + "body": "body u1", + "labels": [], + "milestone": null, + "assignee": null, + "assignees": [], + "requested_reviewers": [], + "requested_reviewers_teams": [], + "state": "closed", + "draft": false, + "is_locked": false, + "comments": 0, + "review_comments": 0, + "additions": 1, + "deletions": 0, + "changed_files": 1, + "html_url": "<base>/acme/checks/pulls/1", + "diff_url": "<base>/acme/checks/pulls/1.diff", + "patch_url": "<base>/acme/checks/pulls/1.patch", + "mergeable": true, + "merged": true, + "merged_at": "<ts>", + "merge_commit_sha": "<sha#1>", + "merged_by": { + "id": "<id:merged_by.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:merged_by.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "allow_maintainer_edit": true, + "base": { + "label": "main", + "ref": "main", + "sha": "<sha#1>", + "repo_id": "<id:base.repo_id#1>", + "repo": { + "id": "<id:base.repo.id#1>", + "owner": { + "id": "<id:base.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:base.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "checks", + "full_name": "acme/checks", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/checks/languages", + "html_url": "<base>/acme/checks", + "url": "<base>/api/v1/repos/acme/checks", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "clone_url": "<base>/acme/checks.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "head": { + "label": "u1", + "ref": "u1", + "sha": "<sha#2>", + "repo_id": "<id:head.repo_id#1>", + "repo": { + "id": "<id:head.repo.id#1>", + "owner": { + "id": "<id:head.repo.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:head.repo.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "checks", + "full_name": "acme/checks", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/checks/languages", + "html_url": "<base>/acme/checks", + "url": "<base>/api/v1/repos/acme/checks", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "clone_url": "<base>/acme/checks.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 2, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + "merge_base": "<sha#3>", + "due_date": null, + "created_at": "<ts>", + "updated_at": "<ts>", + "closed_at": "<ts>", + "pin_order": 0, + "content_version": 0 + }, + "volatile": [ + "mergeable" + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#2>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 405, + "request": { + "Do": "merge" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "Not all required status checks successful", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/checks/pulls/<id:path:pulls#3>/merge", + "auth": "bot-scoped", + "status": 200, + "request": { + "Do": "merge" + }, + "headers": {}, + "body_text": "" + }, + { + "kind": "http", + "method": "DELETE", + "path": "/api/v1/repos/acme/checks/branch_protections/main", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json b/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json new file mode 100644 index 00000000..e726dde4 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json @@ -0,0 +1,257 @@ +{ + "scenario": "V", + "title": "smart-http-bytes", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate", + "expires": "Fri, 01 Jan 1980 00:00:00 GMT", + "pragma": "no-cache" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n003d<sha#1> refs/heads/main\n0000", + "must_contain": [ + "001e# service=git-upload-pack\n0000" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate", + "expires": "Fri, 01 Jan 1980 00:00:00 GMT", + "pragma": "no-cache" + }, + "body_text": "001f# service=git-receive-pack\n000000c4<sha#1> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n0000", + "must_contain": [ + "001f# service=git-receive-pack\n0000" + ], + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_text": "Unauthorized\n", + "volatile": [ + "$text" + ] + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement", + "cache-control": "no-cache, max-age=0, must-revalidate" + }, + "body_text": "001e# service=git-upload-pack\n0000000eversion 2\n001bagent=git/2.52.0-Linux\n0013ls-refs=unborn\n0027fetch=shallow wait-for-done filter\n0012server-option\n0017object-format=sha1\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "v2_advert_first_bytes", + "value": "001e# service=git-upload-pack\\n0000000eversion ", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n003d<sha#1> refs/heads/main\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "v0_upload_preamble", + "value": "001e# service=git-upload-pack\\n0000", + "strict": true + }, + { + "kind": "note", + "key": "v0_upload_capabilities", + "value": "multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/<v>", + "strict": false + }, + { + "kind": "note", + "key": "v0_upload_first_pkt_prefix", + "value": "014c", + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c4<sha#1> refs/heads/main\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "receive_preamble", + "value": "001f# service=git-receive-pack\\n0000", + "strict": true + }, + { + "kind": "note", + "key": "receive_capabilities", + "value": "report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/<v>", + "strict": false + }, + { + "kind": "note", + "key": "receive_first_pkt_prefix", + "value": "00c4", + "strict": false + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/HEAD", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain" + }, + "body_text": "ref: refs/heads/main\n" + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/wire.git/objects/info/packs", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-result", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_prefix_hex": "30303038" + }, + { + "kind": "note", + "key": "plain_upload_pack_response_head", + "value": "0008NAK\n", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-result", + "cache-control": "max-age=0, private, must-revalidate, no-transform" + }, + "body_prefix_hex": "30303038" + }, + { + "kind": "note", + "key": "gzip_upload_pack_response_head", + "value": "0008NAK\n", + "strict": true + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-receive-pack", + "auth": "none", + "status": 401, + "headers": { + "content-type": "text/plain;charset=utf-8", + "www-authenticate": "Basic realm=\"Gitea\"" + }, + "body_text": "Unauthorized\n" + }, + { + "kind": "http", + "method": "POST", + "path": "/acme/wire.git/git-upload-pack", + "auth": "dave-tokbasic", + "status": 404, + "headers": { + "content-type": "text/plain;charset=utf-8" + }, + "body_text": "Repository not found" + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/meta.json b/crates/forge/conformance/fixtures/1.26.2/meta.json new file mode 100644 index 00000000..30a02b35 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/meta.json @@ -0,0 +1,29 @@ +{ + "server_version": { + "version": "1.26.2" + }, + "scenarios": [ + "A-meta.json", + "B-users-orgs-tokens.json", + "C-repos.json", + "D-empty-repo.json", + "E-history-reads.json", + "F-pulls.json", + "G-merge.json", + "H-statuses.json", + "I-branch-protection.json", + "J-smart-http.json", + "K-visibility-probing.json", + "L-force-private.json", + "M-names.json", + "N-default-branch.json", + "O-pr-head-lifecycle.json", + "P-pagination.json", + "Q-protection-bypass.json", + "R-token-scope-edges.json", + "S-ref-pushes.json", + "T-merge-outcomes.json", + "U-status-check-edges.json", + "V-smart-http-bytes.json" + ] +} diff --git a/crates/forge/conformance/gitea-down.sh b/crates/forge/conformance/gitea-down.sh new file mode 100755 index 00000000..0f8d74c0 --- /dev/null +++ b/crates/forge/conformance/gitea-down.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# Remove a container made by gitea-up.sh. Refuses any name it did not create. +set -euo pipefail +c="${1:?usage: gitea-down.sh <container>}" +case "$c" in + sc-forge-conf-*) ;; + *) echo "refusing: $c is not a sc-forge-conf container" >&2; exit 2 ;; +esac +docker rm -f "$c" >/dev/null diff --git a/crates/forge/conformance/gitea-up.sh b/crates/forge/conformance/gitea-up.sh new file mode 100755 index 00000000..e15efbff --- /dev/null +++ b/crates/forge/conformance/gitea-up.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# Start a throwaway Gitea container and print BASE_URL=... ADMIN_TOKEN=... CONTAINER=... +# Usage: gitea-up.sh <version> <label> e.g. gitea-up.sh 1.22.6 rec +# Name and host port are random, so parallel runs never collide. +set -euo pipefail +ver="${1:?usage: gitea-up.sh <version> <label>}" +label="${2:?usage: gitea-up.sh <version> <label>}" +image="gitea/gitea:${ver}-rootless" +name="sc-forge-conf-${label//[^A-Za-z0-9_.-]/-}-$(od -An -N4 -tx1 /dev/urandom | tr -d ' \n')" +pass="$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')" + +# Pick a free host port, then let Docker bind it; retry if someone raced us. +started=0 +for _ in 1 2 3 4 5; do + port="$(python3 -I -c 'import socket;s=socket.socket();s.bind(("127.0.0.1",0));print(s.getsockname()[1]);s.close()')" + if docker run -d --name "$name" -p "127.0.0.1:${port}:3000" \ + -e GITEA__database__DB_TYPE=sqlite3 \ + -e GITEA__security__INSTALL_LOCK=true \ + -e GITEA__service__DISABLE_REGISTRATION=true \ + -e GITEA__actions__ENABLED=false \ + -e GITEA__server__DISABLE_SSH=true \ + -e "GITEA__server__ROOT_URL=http://127.0.0.1:${port}/" \ + -e GITEA__service__REQUIRE_SIGNIN_VIEW=true \ + -e GITEA__repository__DEFAULT_PRIVATE=private \ + -e GITEA__repository__FORCE_PRIVATE=true \ + -e GITEA__server__OFFLINE_MODE=true \ + "$image" >/dev/null 2>&1; then + started=1 + break + fi + docker rm -f "$name" >/dev/null 2>&1 || true +done +[ "$started" = 1 ] || { echo "could not start $image" >&2; exit 1; } +trap 'docker rm -f "$name" >/dev/null 2>&1 || true' ERR + +base="http://127.0.0.1:${port}" +ready=0 +for _ in $(seq 1 120); do + code="$(curl -s -o /dev/null -w '%{http_code}' "$base/api/healthz" || true)" + if [ "$code" = 200 ]; then ready=1; break; fi + sleep 1 +done +if [ "$ready" != 1 ]; then + echo "gitea did not become ready" >&2 + docker logs "$name" 2>&1 | tail -20 >&2 + docker rm -f "$name" >/dev/null 2>&1 || true + exit 1 +fi + +docker exec "$name" gitea admin user create --admin --username siteadmin --password "$pass" \ + --email admin@example.invalid --must-change-password=false >/dev/null +token="$(docker exec "$name" gitea admin user generate-access-token --username siteadmin --scopes all --raw | tr -d '\r\n')" +echo "BASE_URL=${base} ADMIN_TOKEN=${token} CONTAINER=${name}" diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py new file mode 100644 index 00000000..83c55a7f --- /dev/null +++ b/crates/forge/conformance/run.py @@ -0,0 +1,1763 @@ +#!/usr/bin/env python3 +"""Gitea conformance scenario runner (stdlib only; run as `python3 -I run.py ...`). + + record run every scenario against a real Gitea and write normalized fixtures + check run the same scenarios against any server and compare with fixtures + diff compare two fixture directories offline (A = expected, B = actual) + show print a one-line-per-exchange digest of a fixture directory + +See README.md. Scenarios are the functions at the bottom of this file. +""" +import argparse +import base64 +import json as J +import os +import re +import secrets +import shutil +import subprocess +import sys +import tempfile +import time +import urllib.error +import urllib.parse +import urllib.request + +TRACKED_HEADERS = ("content-type", "x-total-count", "link", "www-authenticate", "location") +# Every scalar in a recorded body is compared by value after normalization, except volatile ones: +# `message`/`errors` (text, see must_contain), any `url`/`*_url` (host-dependent), repo `size`, the racy +# `mergeable` (a PR flips to "checking" after every base change; see the notes in G/T), `language` and the +# async open-PR/issue counters, plus +# paths a call lists in `volatile=[...]` (dotted key path, or a bare key name; `$text` for a text body). +TOKEN_KEYS = {"sha1", "token", "token_last_eight", "password"} +SHA_RE = re.compile(r"\b[0-9a-f]{40}\b") +SHORT_RE = re.compile(r"\b[0-9a-f]{7,12}\.\.\.?[0-9a-f]{7,12}\b") +TS_RE = re.compile(r"\d{4}-\d\d-\d\d[T ]\d\d:\d\d:\d\d(?:\.\d+)?(?:Z| ?[+-]\d\d:?\d\d)?") +RFC_RE = re.compile(r"[A-Z][a-z]{2}, \d{1,2} [A-Z][a-z]{2} \d{4} \d\d:\d\d:\d\d [+-]\d{4}") +USERS = ("alice", "bot", "carol", "dave") + + +class SetupError(Exception): + """A call a scenario relies on did not behave as the scenario needs.""" + + +class _NoRedirect(urllib.request.HTTPRedirectHandler): + def redirect_request(self, *a, **k): # surface 3xx as-is + return None + + +OPENER = urllib.request.build_opener(_NoRedirect) + + +class R: + def __init__(self, status, headers, data): + self.status = status + self.headers = {k.lower(): v for k, v in headers.items()} + self.data = data + self.text = data.decode("utf-8", "replace") + self.json, self.is_json = None, False + if data.strip()[:1] in (b"{", b"[") or data.strip() == b"null": + try: + self.json, self.is_json = J.loads(data), True + except ValueError: + pass + + +PH_RE = re.compile(r"<(sha|id:[^#<>]*)#(\d+)>") +ID_RE = re.compile(r"^<id:[^#<>]*#\d+>$") + + +def sort_keys(v): + if isinstance(v, dict): + return {k: sort_keys(v[k]) for k in sorted(v)} + return [sort_keys(x) for x in v] if isinstance(v, list) else v + + +def jtype(v): + if isinstance(v, str) and ID_RE.match(v): + return "number" + if v is None: + return "null" + if isinstance(v, bool): + return "boolean" + if isinstance(v, (int, float)): + return "number" + if isinstance(v, str): + return "string" + return "array" if isinstance(v, list) else "object" + + +class Bij: + """Placeholder identity per scenario: `<sha#2>` in the fixture must always be the same actual value + as each other `<sha#2>`, and two different placeholders must stay different values.""" + + def __init__(self): + self.f, self.r = {}, {} + self.lf, self.lr = {}, {} + + def new_exchange(self): + self.lf, self.lr = {}, {} + + def pair(self, kind, e, a): + # body ids of different entities can coincide numerically, so they only keep identity inside one exchange + f, r = (self.f, self.r) if kind == "sha" or kind.startswith("id:path:") else (self.lf, self.lr) + return f.setdefault((kind, e), a) == a and r.setdefault((kind, a), e) == e + + +def eq_str(exp, act, bij, d, shown): + skel = lambda x: PH_RE.sub(lambda m: "<%s>" % m.group(1), x) # noqa: E731 + if skel(exp) != skel(act): + d.append(("fail", f"{shown}: value {exp!r} expected, got {act!r}")) + return False + for me, ma in zip(PH_RE.finditer(exp), PH_RE.finditer(act)): + if not bij.pair(me.group(1), me.group(2), ma.group(2)): + d.append(("fail", f"{shown}: identity mismatch, {me.group(0)} expected but {ma.group(0)} is a different " + f"value than it was paired with earlier")) + return False + return True + + +def is_volatile(key, dotted, parent, volatile): + if dotted in volatile or key in volatile: + return True + k = key or "" + if k in ("message", "errors", "url", "mergeable", "language", "open_pr_counter", "open_issues_count") or (k.endswith("_url") and k != "target_url"): + return True + return k == "size" and isinstance(parent, dict) and "full_name" in parent + + +def cmp_json(exp, act, path, d, volatile, bij, key=None, parent=None): + te, ta = jtype(exp), jtype(act) + shown = path or "$" + if te != ta: + d.append(("fail", f"{shown}: type {te} expected, got {ta}")) + return + dotted = re.sub(r"\[\d+\]", "", path).lstrip(".") + if is_volatile(key, dotted, parent, volatile): + return + if te == "object": + for k, v in exp.items(): + if k not in act: + d.append(("fail", f"{path}.{k}: key missing")) + else: + cmp_json(v, act[k], f"{path}.{k}", d, volatile, bij, k, exp) + elif te == "array": + if len(exp) != len(act): + d.append(("fail", f"{shown}: array length {len(exp)} expected, got {len(act)}")) + for i, (a, b) in enumerate(zip(exp, act)): + cmp_json(a, b, f"{path}[{i}]", d, volatile, bij, key, parent) + elif isinstance(exp, str): + eq_str(exp, act, bij, d, shown) + elif exp != act: + d.append(("fail", f"{shown}: value {exp!r} expected, got {act!r}")) + + +def msg_text(ex): + b = ex.get("body") + if isinstance(b, dict) and isinstance(b.get("message"), str): + return b["message"] + if "body" in ex: + return J.dumps(b) + return ex.get("body_text") or ex.get("output") or "" + + +def cmp_exchange(exp, act, bij): + """Return [(level, text)] where level is 'fail' or 'warn'. Empty list means match.""" + d = [] + bij.new_exchange() + if exp["kind"] != act["kind"]: + return [("fail", f"kind {exp['kind']} expected, got {act['kind']}")] + if exp["kind"] == "note": + if exp["key"] != act["key"]: + d.append(("fail", f"note {exp['key']} expected, got {act['key']}")) + elif exp["value"] != act["value"]: + lvl = "fail" if exp.get("strict", True) else "warn" + d.append((lvl, f"note {exp['key']}: {exp['value']!r} expected, got {act['value']!r}")) + return d + if exp["kind"] == "git": + if exp["name"] != act["name"]: + return [("fail", f"git step {exp['name']} expected, got {act['name']}")] + if exp["ok"] != act["ok"]: + d.append(("fail", f"git ok={exp['ok']} expected, got {act['ok']}: {act['output'][:200]!r}")) + else: + if exp["method"] != act["method"] or not eq_str(exp["path"], act["path"], bij, [], ""): + return [("fail", f"request {exp['method']} {exp['path']} expected, got {act['method']} {act['path']}")] + if exp["status"] != act["status"]: + d.append(("fail", f"status {exp['status']} expected, got {act['status']}: {msg_text(act)[:200]!r}")) + for h, v in exp.get("headers", {}).items(): + got = act.get("headers", {}).get(h) + if got is None: + d.append(("fail", f"header {h}: expected {v!r}, missing")) + else: + eq_str(v, got, bij, d, f"header {h}") + volatile = set(exp.get("volatile", [])) + if "body" in exp: + if "body" not in act: + d.append(("fail", f"expected JSON body, got {act.get('body_text', '')[:120]!r}")) + else: + cmp_json(exp["body"], act["body"], "", d, volatile, bij) + elif "body_text" in exp and "$text" not in volatile: + if "body_text" not in act: + d.append(("fail", f"expected text body, got JSON {J.dumps(act.get('body'))[:120]}")) + else: + eq_str(exp["body_text"], act["body_text"], bij, d, "text body") + if "body_prefix_hex" in exp and exp["body_prefix_hex"] != act.get("body_prefix_hex"): + d.append(("fail", f"body prefix {exp['body_prefix_hex']} expected, got {act.get('body_prefix_hex')}")) + text = msg_text(act).lower() + for w in exp.get("must_contain", []): + if w.lower() not in text: + d.append(("fail", f"message lacks {w!r}: {text[:200]!r}")) + return d + + +# --------------------------------------------------------------------------- context + +class Ctx: + def __init__(self, base, admin_token, mode): + self.base = base.rstrip("/") + self.hostport = urllib.parse.urlparse(self.base).netloc + self.mode = mode + self.secrets = {admin_token} + self.pw = {} + self.vars = {} + self.tmp = os.path.realpath(tempfile.mkdtemp(prefix="sc-conf-")) + os.makedirs(self.tmp + "/home") + self.admin_user = "siteadmin" + bad = secrets.token_hex(20) + self.secrets.add(bad) + self.principals = { + "none": None, + "bad": {"kind": "token", "user": "nobody", "secret": bad}, + "admin": {"kind": "token", "user": "siteadmin", "secret": admin_token}, + } + self.recording = True + self.reset_scenario() + self.ex = [] + self.expected = [] + self.cursor = 0 + self.diffs = [] # (scenario, index, label, [(level, text)]) + self.verbose = False + self.base_ready = False + r = self.call("GET", "/user", rec=False) + if r.status != 200 or not r.json: + raise SystemExit(f"admin token rejected by {self.base}: {r.status} {r.text[:200]}") + self.admin_user = r.json["login"] + self.principals["admin"]["user"] = self.admin_user + self.principals["admin-basic"] = dict(self.principals["admin"], kind="basic") + self.principals["admin-bearer"] = dict(self.principals["admin"], kind="bearer") + + # -- normalization + def sha_ph(self, h): + return "<sha#%d>" % self.sha_ord.setdefault(h, len(self.sha_ord) + 1) + + def id_ph(self, space, v): + m = (self.id_ord if space.startswith("path:") else self.id_local).setdefault(space, {}) + return "<id:%s#%d>" % (space, m.setdefault(v, len(m) + 1)) + + def scrub(self, s): + for sec in sorted(self.secrets, key=len, reverse=True): + if sec: + s = s.replace(sec, "<token>") + s = s.replace(self.base, "<base>").replace(self.hostport, "<host>").replace(self.tmp, "<tmp>") + return re.sub(r"\b%s\b" % re.escape(self.admin_user), "<admin>", s) + + def ns(self, s): + s = self.scrub(s) + # pkt-line adverts glue a 4-hex length in front of the id ("0146<sha> HEAD"), so \b misses it + s = re.sub(r"[0-9a-f]{40}(?= (?:HEAD|refs/|capabilities))", lambda m: self.sha_ph(m.group(0)), s) + s = SHA_RE.sub(lambda m: self.sha_ph(m.group(0)), s) + s = SHORT_RE.sub("<short>..<short>", s) + return RFC_RE.sub("<ts>", TS_RE.sub("<ts>", s)) + + def nj(self, v): + # register shas/ids in sorted-key order first so numbering does not depend on key order; + # body ids are numbered per call (see Bij), path ids and shas per scenario + self.id_local = {} + self._nj(sort_keys(v), (), None) + return self._nj(v, (), None) + + def _nj(self, v, path, key): + if isinstance(v, dict): + return {k: self._nj(x, path + (k,), k) for k, x in v.items()} + if isinstance(v, list): + return [self._nj(x, path, key) for x in v] + if isinstance(v, str): + return "<token>" if key in TOKEN_KEYS else self.ns(v) + if isinstance(v, (int, float)) and not isinstance(v, bool) and key and (key in ("id", "uid") or key.endswith("_id")): + return self.id_ph(".".join(path), v) + return v + + def np(self, p): + path, _, q = p.partition("?") + segs, out = path.split("/"), [] + for i, s in enumerate(segs): + m = re.fullmatch(r"(\d+)(\.[a-z]+)?", s) + if m and not SHA_RE.fullmatch(s): + out.append(self.id_ph("path:" + (segs[i - 1] if i else ""), int(m.group(1))) + (m.group(2) or "")) + else: + out.append(self.ns(s)) + return "/".join(out) + ("?" + self.ns(q) if q else "") + + def reset_scenario(self): + self.sha_ord, self.id_ord, self.id_local, self.bij = {}, {}, {}, Bij() + + # -- recording + def push_ex(self, ex): + if not self.recording: + return + i = len(self.ex) + self.ex.append(ex) + if self.mode == "check": + if i >= len(self.expected): + self.diffs.append((i, ex_label(ex), [("fail", "extra exchange not present in fixture")])) + else: + self.diffs.append((i, ex_label(ex), cmp_exchange(self.expected[i], ex, self.bij))) + + def note(self, key, value, strict=True): + self.push_ex({"kind": "note", "key": key, "value": value, "strict": strict}) + + def new_password(self): + p = secrets.token_hex(12) + self.secrets.add(p) + return p + + # -- HTTP + def call(self, method, path, json=None, as_="admin", expect=None, must_contain=None, + volatile=None, headers=None, data=None, api=True, binary=False, rec=True, track=(), + retry_while=None, retry_s=90, no_retry=False): + full = ("/api/v1" + path) if api else path + hdrs = {"Accept": "application/json", "User-Agent": "sc-forge-conformance"} + p = self.principals[as_] + if p: + if p["kind"] == "token": + hdrs["Authorization"] = "token " + p["secret"] + elif p["kind"] == "bearer": + hdrs["Authorization"] = "Bearer " + p["secret"] + else: + hdrs["Authorization"] = "Basic " + base64.b64encode(f"{p['user']}:{p['secret']}".encode()).decode() + if json is not None: + data = J.dumps(json).encode() + hdrs["Content-Type"] = "application/json" + hdrs.update(headers or {}) + if retry_while is None and method == "POST" and path.endswith("/merge") and not no_retry: + retry_while = ["try again later"] + deadline = time.time() + retry_s + while True: + req = urllib.request.Request(self.base + full, data=data, method=method, headers=hdrs) + try: + with OPENER.open(req, timeout=120) as resp: + r = R(resp.status, dict(resp.headers), resp.read()) + except urllib.error.HTTPError as e: + r = R(e.code, dict(e.headers), e.read()) + # `retry_while`: re-send while the response text has one of these markers, and record only the + # last response (used for Gitea's "Please try again later" while a PR is being checked) + if not retry_while or time.time() >= deadline or not any(w in r.text.lower() for w in retry_while): + break + time.sleep(1) + if rec: + ex = {"kind": "http", "method": method, "path": self.np(full), "auth": as_, + "status": r.status} + if json is not None: + ex["request"] = self.nj(json) + hd = {h: self.ns(r.headers[h]).replace(" ", "").lower() if h == "content-type" else self.ns(r.headers[h]) + for h in TRACKED_HEADERS + tuple(track) if h in r.headers} + ex["headers"] = hd + if r.is_json and (not binary or r.status >= 300): + ex["body"] = self.nj(r.json) + elif binary: + ex["body_prefix_hex"] = r.data[:4].hex() + else: + ex["body_text"] = self.ns(r.text[:3000]).replace("\x00", "\\0") + for k, v in (("must_contain", must_contain), ("volatile", volatile)): + if v: + ex[k] = list(v) + self.push_ex(ex) + if expect is not None: + ok = expect if isinstance(expect, (list, tuple, set)) else [expect] + if r.status not in ok: + raise SetupError(f"{method} {full}: expected {sorted(ok)}, got {r.status}: {r.text[:300]}") + return r + + # -- git + def git_url(self, repo, who="admin", user=None, secret=None, org="acme"): + p = self.principals[who] + u, s = (p["user"] if user is None else user), (secret if secret is not None else p["secret"]) + host = self.base.split("://", 1) + auth = f"{urllib.parse.quote(u, safe='')}:{urllib.parse.quote(s, safe='')}@" if (u or s) else "" + return f"{host[0]}://{auth}{host[1]}/{org}/{repo}.git" + + def git(self, args, cwd=None, name=None, rec=True, ok=None, must_contain=None, extra_header=None, + env_extra=None): + pre = ["-c", "credential.helper=", "-c", "advice.detachedHead=false", "-c", "init.defaultBranch=main", + "-c", "user.name=Conf", "-c", "user.email=conf@example.invalid", "-c", "commit.gpgsign=false"] + if extra_header: + pre += ["-c", "http.extraHeader=" + extra_header[1]] + env = {"PATH": os.environ.get("PATH", ""), "HOME": self.tmp + "/home", "GIT_CONFIG_NOSYSTEM": "1", + "GIT_CONFIG_GLOBAL": "/dev/null", "GIT_TERMINAL_PROMPT": "0", "LC_ALL": "C"} + env.update(env_extra or {}) + p = subprocess.run(["git"] + pre + args, cwd=cwd, env=env, capture_output=True, timeout=180) + out = (p.stdout + p.stderr).decode("utf-8", "replace") + if rec: + cmd = "git " + (f"-c http.extraHeader=<{extra_header[0]}> " if extra_header else "") + " ".join(args) + ex = {"kind": "git", "name": name or args[0], "cmd": self.ns(cmd), "ok": p.returncode == 0, + "output": self.ns(out.strip()[-2000:])} + if must_contain: + ex["must_contain"] = list(must_contain) + self.push_ex(ex) + want = ok if ok is not None else (None if rec else True) + if want is not None and (p.returncode == 0) != want: + raise SetupError(f"git {' '.join(self.ns(a) for a in args)}: exit {p.returncode}: {self.ns(out)[-400:]}") + return p.returncode == 0, out.strip() + + def wc(self, repo, who="admin", org="acme"): + path = f"{self.tmp}/wc-{org}-{repo}" + if not os.path.isdir(path): + self.git(["clone", self.git_url(repo, who, org=org), path], rec=False) + return path + + def push_branch(self, repo, branch, files, base="origin/main", msg=None, who="admin", org="acme"): + """Commit `files` on `branch` (from rev `base`, or from nothing when None) and push it. Returns the sha.""" + p = self.wc(repo, who, org) + self.git(["fetch", "origin"], cwd=p, rec=False) + if base is None: + self.git(["symbolic-ref", "HEAD", f"refs/heads/{branch}"], cwd=p, rec=False) + else: + self.git(["checkout", "-q", "-B", branch, base], cwd=p, rec=False) + for rel, content in files.items(): + fp = os.path.join(p, rel) + os.makedirs(os.path.dirname(fp), exist_ok=True) + with open(fp, "w") as f: + f.write(content) + self.git(["add", "-A"], cwd=p, rec=False) + self.git(["commit", "-q", "-m", msg or f"commit on {branch}"], cwd=p, rec=False) + self.git(["push", "-q", "-f", "origin", f"{branch}:{branch}"], cwd=p, rec=False) + return self.git(["rev-parse", "HEAD"], cwd=p, rec=False)[1] + + def head(self, repo, branch="main", org="acme"): + return self.call("GET", f"/repos/{org}/{repo}/branches/{branch}", rec=False, expect=200).json["commit"]["id"] + + def mk_user(self, name, rec=False): + pw = self.new_password() + r = self.call("POST", "/admin/users", {"username": name, "email": f"{name}@example.invalid", "password": pw, + "must_change_password": False}, expect=201, rec=rec) + self.pw[name] = pw + return r + + def mk_token(self, user, name, scopes, principal, rec=False): + self.principals[f"{user}-basic"] = {"kind": "basic", "user": user, "secret": self.pw[user]} + r = self.call("POST", f"/users/{user}/tokens", {"name": name, "scopes": scopes}, as_=f"{user}-basic", + expect=201, rec=rec) + tok = r.json["sha1"] + self.secrets.add(tok) + self.principals[principal] = {"kind": "token", "user": user, "secret": tok} + return r + + def mk_repo(self, name, auto_init=True, org="acme", collab=None, rec=False, default_branch="main"): + body = {"name": name, "private": True, "auto_init": auto_init, "default_branch": default_branch} + if auto_init: + body["readme"] = "Default" + self.call("POST", f"/orgs/{org}/repos", body, expect=201, rec=rec) + for u, perm in (collab or {"bot": "write", "alice": "write", "carol": "read"}).items(): + self.call("PUT", f"/repos/{org}/{name}/collaborators/{u}", {"permission": perm}, expect=204, rec=False) + + def api_file(self, repo, path, content, msg="api commit", branch="main", org="acme"): + r = self.call("POST", f"/repos/{org}/{repo}/contents/{path}", { + "content": base64.b64encode(content.encode()).decode(), "message": msg, "branch": branch}, + expect=201, rec=False) + return r.json["commit"]["sha"] + + +def ex_label(ex): + if ex["kind"] == "http": + return f"{ex['method']} {ex['path']} -> {ex['status']}" + if ex["kind"] == "git": + return f"git {ex['name']}: {ex['cmd'][:100]}" + return f"note {ex['key']}" + + +def ensure_base(c): + """Idempotent, unrecorded: users, org and tokens that most scenarios need.""" + if c.base_ready: + return + for u in USERS: + if u not in c.pw: + if c.call("GET", f"/users/{u}", rec=False).status == 404: + c.mk_user(u) + else: + raise SetupError(f"user {u} exists with an unknown password: use a fresh server") + if c.call("GET", "/orgs/acme", rec=False).status == 404: + c.call("POST", "/orgs", {"username": "acme", "full_name": "Acme", "visibility": "private"}, expect=201, rec=False) + for u in USERS: + if u not in c.principals: + c.mk_token(u, "conf-all", ["all"], u) + if "bot-scoped" not in c.principals: + c.mk_token("bot", "conf-scoped", ["read:user", "read:organization", "write:repository"], "bot-scoped") + if "alice-ro" not in c.principals: + c.mk_token("alice", "conf-ro", ["read:repository"], "alice-ro") + # token-as-Basic-password principals for git smart HTTP endpoints (`<name>-tokbasic`) + for who in ("admin", "bad") + USERS: + c.principals[f"{who}-tokbasic"] = dict(c.principals[who], kind="basic") + c.principals["oauth2-tokbasic"] = dict(c.principals["admin"], kind="basic", user="oauth2") + c.base_ready = True + + +# --------------------------------------------------------------------------- runner + +SCENARIOS = [] + + +def scenario(sid, slug, base=True): + def deco(fn): + SCENARIOS.append((sid, slug, base, fn)) + return fn + return deco + + +def run_all(c, only, out=None, fixtures=None): + summary = [] + for sid, slug, needs_base, fn in SCENARIOS: + if only and sid not in only: + continue + fname = f"{sid}-{slug}.json" + c.ex, c.cursor, c.diffs = [], 0, [] + c.reset_scenario() + c.expected, skip = [], None + if c.mode == "check": + fp = os.path.join(fixtures, fname) + if not os.path.exists(fp): + summary.append((sid, slug, "FAIL", ["no fixture " + fname])) + continue + fx = J.load(open(fp)) + c.expected = fx["exchanges"] + skip = fx.get("error") + t0 = time.time() + err = None + try: + if needs_base: + ensure_base(c) + fn(c) + except Exception as e: # noqa: BLE001 - scenario failures are data + err = f"{type(e).__name__}: {e}" + dt = time.time() - t0 + if c.mode == "record": + os.makedirs(out, exist_ok=True) + with open(os.path.join(out, fname), "w") as f: + J.dump({"scenario": sid, "title": slug, "error": err, "exchanges": c.ex}, f, indent=2) + f.write("\n") + summary.append((sid, slug, "ERROR" if err else "ok", [err] if err else [], len(c.ex), dt)) + continue + lines, failed = [], False + for i, label, ds in c.diffs: + bad = [x for x in ds if x[0] == "fail"] + failed |= bool(bad) + if bad or ds or c.verbose: + lines.append(f" {'FAIL' if bad else ('warn' if ds else 'ok ')} #{i:02d} {label}") + lines += [f" {lv}: {t}" for lv, t in ds] + if err: + failed = True + lines.append(f" ERROR {err}") + if skip: + failed = False + lines.append(f" (fixture recorded the same error: {skip})") + elif len(c.ex) < len(c.expected): + failed = True + lines.append(f" FAIL {len(c.expected) - len(c.ex)} recorded exchange(s) not produced") + summary.append((sid, slug, "FAIL" if failed else "ok", lines, len(c.ex), dt)) + return summary + + +def cmd_run(a): + c = Ctx(a.base_url, a.admin_token, a.cmd) + c.verbose = a.verbose + only = set(a.only.split(",")) if a.only else None + t0 = time.time() + try: + if a.cmd == "record": + ver = c.call("GET", "/version", rec=False).json + summary = run_all(c, only, out=a.out) + os.makedirs(a.out, exist_ok=True) + with open(os.path.join(a.out, "meta.json"), "w") as f: + J.dump({"server_version": ver, "scenarios": sorted(x for x in os.listdir(a.out) if x.endswith(".json") and x != "meta.json")}, f, indent=2) + f.write("\n") + else: + summary = run_all(c, only, fixtures=a.fixtures) + finally: + shutil.rmtree(c.tmp, ignore_errors=True) + bad = 0 + for s in summary: + sid, slug, st, lines = s[:4] + extra = f" ({s[4]} exchanges, {s[5]:.1f}s)" if len(s) > 4 else "" + print(f"[{sid}] {slug}: {st}{extra}") + for ln in lines: + print(ln if a.cmd == "check" else f" {ln}") + bad += st in ("FAIL", "ERROR") + print(f"\n{len(summary) - bad}/{len(summary)} scenarios ok in {time.time() - t0:.0f}s") + return 1 if bad else 0 + + +def load_dir(d): + out = {} + for f in sorted(os.listdir(d)): + if f.endswith(".json") and f != "meta.json": + out[f] = J.load(open(os.path.join(d, f))) + return out + + +def cmd_diff(a): + A, B, bad = load_dir(a.a), load_dir(a.b), 0 + for f in sorted(set(A) | set(B)): + if f not in A or f not in B: + print(f"{f}: only in {'A' if f in A else 'B'}") + continue + ea, eb = A[f]["exchanges"], B[f]["exchanges"] + print(f"{f}: {len(ea)} vs {len(eb)} exchanges" + (f" (errors: A={A[f]['error']!r} B={B[f]['error']!r})" if A[f]["error"] or B[f]["error"] else "")) + bij = Bij() + for i, (x, y) in enumerate(zip(ea, eb)): + ds = cmp_exchange(x, y, bij) + ma, mb = msg_text(x), msg_text(y) + texty = isinstance(x.get("body"), dict) and "message" in x["body"] or "body_text" in x + if ma != mb and x["kind"] == "http" and ma and mb and texty: + ds.append(("info", f"text differs: {ma[:160]!r} vs {mb[:160]!r}")) + if ds: + bad += 1 + print(f" #{i:02d} {ex_label(x)}") + for lv, t in ds: + print(f" {lv}: {t}") + return 0 + + +def cmd_show(a): + for f, fx in load_dir(a.dir).items(): + if a.only and not f.startswith(tuple(a.only.split(","))): + continue + print(f"== {f}" + (f" ERROR {fx['error']}" if fx["error"] else "")) + for i, ex in enumerate(fx["exchanges"]): + if ex["kind"] == "note": + print(f" #{i:02d} note {ex['key']} = {ex['value']!r}") + continue + print(f" #{i:02d} {ex_label(ex)}" + (f" [{ex.get('auth')}]" if ex["kind"] == "http" else "")) + if ex["kind"] == "git" and not a.body: + print(f" ok={ex['ok']} | " + " / ".join(x.strip() for x in ex["output"].splitlines()[-2:] if x.strip())[:200]) + if a.body: + if ex["kind"] == "git": + print(" " + ex["output"].replace("\n", "\n ")[:a.limit]) + else: + if ex.get("headers"): + print(f" headers {ex['headers']}") + b = ex.get("body", ex.get("body_text", ex.get("body_prefix_hex"))) + print(" " + (J.dumps(b) if not isinstance(b, str) else b)[:a.limit]) + else: + m = msg_text(ex) + if m and ex["kind"] == "http" and ex["status"] >= 300: + print(f" {m[:140]}") + return 0 + + +def main(): + ap = argparse.ArgumentParser(prog="run.py") + sub = ap.add_subparsers(dest="cmd", required=True) + for name in ("record", "check"): + p = sub.add_parser(name) + p.add_argument("--base-url", required=True) + p.add_argument("--admin-token", required=True) + p.add_argument("--only", help="comma-separated scenario ids, e.g. A,F") + p.add_argument("-v", "--verbose", action="store_true") + if name == "record": + p.add_argument("--out", required=True) + else: + p.add_argument("--fixtures", required=True) + p = sub.add_parser("diff") + p.add_argument("a") + p.add_argument("b") + p = sub.add_parser("show") + p.add_argument("dir") + p.add_argument("--only") + p.add_argument("--body", action="store_true") + p.add_argument("--limit", type=int, default=600) + a = ap.parse_args() + sys.exit({"record": cmd_run, "check": cmd_run, "diff": cmd_diff, "show": cmd_show}[a.cmd](a)) + + +# =========================================================================== scenarios +# Each scenario is a function of the Ctx. `c.call(...)` records an exchange; `rec=False` calls are +# setup and are not compared. Use `must_contain` for the words a `message` must carry, `exact` to +# force value equality of a body path, `loose` to compare a path by type only. + + +@scenario("A", "meta", base=False) +def sc_meta(c): + c.call("GET", "/version") + c.call("GET", "/version", as_="none") + c.call("GET", "/api/healthz", as_="none", api=False) + c.call("GET", "/user") + c.call("GET", "/user", as_="bad") + c.call("GET", "/user", as_="none") + c.call("POST", "/user/repos", {"name": "probe", "private": True}, expect=201, rec=False) + me = c.admin_user + c.call("GET", f"/repos/{me}/probe", as_="none") + c.call("GET", f"/repos/{me}/probe", as_="bad") + c.call("GET", f"/repos/{me}/missing") + + +@scenario("B", "users-orgs-tokens", base=False) +def sc_users(c): + pw = c.new_password() + body = {"username": "alice", "email": "alice@example.invalid", "password": pw, "must_change_password": False} + c.call("POST", "/admin/users", body, expect=201) + c.pw["alice"] = pw + c.call("POST", "/admin/users", body, must_contain=["already exists"]) + c.mk_user("bot", rec=True) + c.mk_user("carol") + c.mk_user("dave") + pw2 = c.new_password() + c.call("PATCH", "/admin/users/alice", {"login_name": "alice", "source_id": 0, "password": pw2, + "visibility": "private", "must_change_password": False}) + c.pw["alice"] = pw2 + c.call("GET", "/users/alice") + c.call("GET", "/users/alice", as_="none") + c.call("GET", "/users/nobody-here", must_contain=["not exist"]) + org = {"username": "acme", "full_name": "Acme", "visibility": "private"} + c.call("POST", "/orgs", org, expect=201) + c.call("POST", "/orgs", org, must_contain=["already exists"]) + c.call("GET", "/orgs/acme") + c.call("GET", "/orgs/nobody-org") + c.call("GET", f"/users/{c.admin_user}/orgs/acme/permissions") + c.call("GET", "/users/alice/orgs/acme/permissions") + team = c.call("POST", "/orgs/acme/teams", {"name": "devs", "permission": "read", "includes_all_repositories": False, + "units": ["repo.code", "repo.pulls"]}, expect=201, rec=False).json + c.call("PUT", f"/teams/{team['id']}/members/carol", expect=204, rec=False) + c.call("GET", "/users/carol/orgs/acme/permissions") + # tokens + c.mk_token("alice", "ci", ["read:repository"], "alice-ro", rec=True) + r = c.mk_token("alice", "tmp", ["read:repository", "write:repository"], "alice-tmp", rec=True) + order = ["id", "name", "scopes"] # list order of same-second tokens is a tie-break on some versions + c.call("GET", "/users/alice/tokens", as_="alice-basic", volatile=order) + c.call("GET", "/users/alice/tokens", as_="alice-ro") + c.call("DELETE", f"/users/alice/tokens/{r.json['id']}", as_="alice-basic") + c.call("GET", "/users/alice/tokens", as_="alice-basic", volatile=order) + c.call("POST", "/users/alice/tokens", {"name": "ci", "scopes": ["all"]}, as_="alice-basic") + c.mk_token("alice", "all", ["all"], "alice") + c.mk_token("bot", "scoped", ["read:user", "read:organization", "write:repository"], "bot-scoped", rec=True) + c.mk_token("bot", "all", ["all"], "bot") + c.mk_token("carol", "all", ["all"], "carol") + c.mk_token("dave", "all", ["all"], "dave") + c.call("POST", "/orgs/acme/repos", {"name": "nope"}, as_="alice-ro") + # scope enforcement: read-only token against writes, on a repo alice owns + c.call("POST", "/user/repos", {"name": "scoped", "auto_init": True, "private": True}, as_="alice", expect=201, rec=False) + f = c.call("GET", "/repos/alice/scoped/contents/README.md", rec=False, expect=200).json + sha = c.head("scoped", org="alice") + c.call("GET", "/repos/alice/scoped", as_="alice-ro") + c.call("POST", "/user/repos", {"name": "nope"}, as_="alice-ro") + c.call("POST", "/repos/alice/scoped/contents/new.txt", {"content": "aGk=", "message": "m"}, as_="alice-ro") + c.call("PUT", "/repos/alice/scoped/contents/README.md", {"content": "aGk=", "message": "m", "sha": f["sha"]}, as_="alice-ro") + c.call("PUT", "/repos/alice/scoped/collaborators/carol", {"permission": "write"}, as_="alice-ro") + c.call("POST", f"/repos/alice/scoped/statuses/{sha}", {"state": "success", "context": "x"}, as_="alice-ro") + # the scoped bot token + c.call("GET", "/user", as_="bot-scoped") + c.call("GET", "/orgs/acme", as_="bot-scoped") + c.call("GET", "/admin/users", as_="bot-scoped") + c.call("POST", "/user/repos", {"name": "botrepo", "private": True}, as_="bot-scoped") + c.call("GET", "/repos/alice/scoped", as_="bot-scoped") + + +def local_commit(c, p, files, msg="local commit"): + for rel, content in files.items(): + fp = os.path.join(p, rel) + os.makedirs(os.path.dirname(fp), exist_ok=True) + with open(fp, "w") as f: + f.write(content) + c.git(["add", "-A"], cwd=p, rec=False) + c.git(["commit", "-q", "-m", msg], cwd=p, rec=False) + return c.git(["rev-parse", "HEAD"], cwd=p, rec=False)[1] + + +@scenario("C", "repos") +def sc_repos(c): + create = {"name": "alpha", "auto_init": True, "default_branch": "main", "private": True, "readme": "Default"} + c.call("POST", "/orgs/acme/repos", create, expect=201) + c.call("POST", "/orgs/acme/repos", create, must_contain=["already exists"]) + c.call("POST", "/orgs/acme/repos", {"name": "empty", "auto_init": False, "private": True, "default_branch": "main"}, + expect=201) + c.call("GET", "/repos/acme/alpha") + c.call("GET", "/repos/acme/empty") + c.call("GET", "/repos/acme/missing") + c.call("PATCH", "/repos/acme/alpha", {"private": True}) + c.call("PATCH", "/repos/acme/alpha", {"has_actions": True}) + c.call("PATCH", "/repos/acme/alpha", {"description": "Alpha repo"}) + c.call("GET", "/repos/search?limit=50&sort=alpha") + c.call("GET", "/repos/search?q=alp&limit=50") + # access before any grant + c.call("GET", "/repos/acme/alpha", as_="dave") + c.call("GET", "/repos/acme/alpha", as_="bad") + c.call("GET", "/repos/acme/alpha", as_="none") + # collaborators + c.call("PUT", "/repos/acme/alpha/collaborators/bot", {"permission": "write"}) + c.call("PUT", "/repos/acme/alpha/collaborators/carol", {"permission": "read"}) + c.call("PUT", "/repos/acme/alpha/collaborators/alice", {"permission": "write"}) + c.call("PUT", "/repos/acme/alpha/collaborators/nobody-here", {"permission": "write"}) + c.call("GET", "/repos/acme/alpha/collaborators") + c.call("GET", "/repos/acme/alpha/collaborators/bot/permission") + c.call("GET", "/repos/acme/alpha", as_="bot") + c.call("GET", "/repos/acme/alpha", as_="bot-scoped") + c.call("GET", "/repos/acme/alpha", as_="carol") + c.call("GET", "/repos/search?limit=50&sort=alpha", as_="carol") + c.call("DELETE", "/repos/acme/alpha/collaborators/carol") + c.call("GET", "/repos/acme/alpha", as_="carol") + c.call("PUT", "/repos/acme/alpha/collaborators/carol", {"permission": "read"}, expect=204) + # pushes over HTTP + p = c.wc("alpha", "bot") + local_commit(c, p, {"bot.txt": "bot\n"}) + c.git(["push", "origin", "HEAD:refs/heads/bot-branch"], cwd=p, name="push-write-collab") + c.git(["push", c.git_url("alpha", "bot-scoped"), "HEAD:refs/heads/bot-scoped-branch"], cwd=p, name="push-write-scoped-token") + c.git(["push", c.git_url("alpha", "alice-ro"), "HEAD:refs/heads/ro-scope"], cwd=p, name="push-readonly-scope") + c.git(["push", c.git_url("alpha", "carol"), "HEAD:refs/heads/carol-branch"], cwd=p, name="push-read-collab") + c.git(["push", c.git_url("alpha", "dave"), "HEAD:refs/heads/dave-branch"], cwd=p, name="push-no-grant") + c.git(["clone", c.git_url("alpha", "dave"), c.tmp + "/dave-clone"], name="clone-no-grant") + c.git(["clone", c.git_url("alpha", "carol"), c.tmp + "/carol-clone"], name="clone-read-collab") + # delete + c.call("POST", "/orgs/acme/repos", {"name": "doomed", "auto_init": True, "private": True}, expect=201) + c.call("DELETE", "/repos/acme/doomed") + c.call("GET", "/repos/acme/doomed") + c.call("DELETE", "/repos/acme/doomed") + c.call("POST", "/orgs/acme/repos", {"name": "doomed", "auto_init": True, "private": True}, expect=201) + + +@scenario("D", "empty-repo") +def sc_empty(c): + c.mk_repo("blank", auto_init=False) + c.call("GET", "/repos/acme/blank") + for path in ("/commits", "/commits?sha=main&limit=1", "/branches", "/branches/main", "/git/refs/heads", + "/git/refs", "/contents", "/contents/README.md", "/git/trees/main", "/git/commits/HEAD", + "/archive/main.zip", "/tags", "/pulls?state=all"): + c.call("GET", "/repos/acme/blank" + path) + + +@scenario("E", "history-reads") +def sc_history(c): + c.mk_repo("hist", auto_init=False) + c1 = c.push_branch("hist", "main", {"README.md": "# hist\n"}, base=None, msg="first") + c2 = c.push_branch("hist", "main", {"docs/guide.md": "guide\n", "src/lib.rs": "fn main() {}\n"}, msg="second") + c3 = c.push_branch("hist", "main", {"README.md": "# hist\nedited\n"}, msg="third") + f1 = c.push_branch("hist", "feat/x", {"feat1.txt": "f1\n"}, base=c2, msg="feat one") + f2 = c.push_branch("hist", "feat/x", {"feat2.txt": "f2\n"}, base="origin/feat/x", msg="feat two") + R = "/repos/acme/hist" + c.call("GET", R) + c.call("GET", R + "/branches") + c.call("GET", R + "/branches?limit=1&page=2") + c.call("GET", R + "/branches/main") + c.call("GET", R + "/branches/feat/x") + c.call("GET", R + "/branches/nope") + c.call("GET", R + "/git/refs/heads") + c.call("GET", R + "/git/refs/heads/main") + c.call("GET", R + "/git/refs/heads/feat/x") + c.call("GET", R + "/git/refs/heads/nope") + c.call("GET", R + "/git/refs") + q = "&stat=false&files=false&verification=false" + c.call("GET", R + f"/commits?sha=main&limit=50{q}") + c.call("GET", R + f"/commits?sha=main&limit=2&page=1{q}") + c.call("GET", R + f"/commits?sha=main&limit=2&page=2{q}") + c.call("GET", R + f"/commits?sha=main&limit=2&page=3{q}") + c.call("GET", R + f"/commits?sha=feat/x&limit=50{q}") + c.call("GET", R + f"/commits?sha={f2}&limit=50{q}") + c.call("GET", R + "/commits?sha=main&limit=1") + c.call("GET", R + f"/commits?sha=nope&limit=50{q}") + c.call("GET", R + f"/git/commits/{c3}") + c.call("GET", R + f"/git/commits/{f2}") + c.call("GET", R + f"/git/commits/{c3}.diff", must_contain=["diff --git"]) + c.call("GET", R + f"/git/commits/{c3}.patch", must_contain=["From "]) + c.call("GET", R + f"/git/commits/{'0' * 40}") + c.call("GET", R + f"/git/trees/{c3}?recursive=true") + c.call("GET", R + f"/git/trees/{c3}") + c.call("GET", R + "/git/trees/main?recursive=true&per_page=2&page=1") + c.call("GET", R + "/contents") + c.call("GET", R + "/contents?ref=feat/x") + c.call("GET", R + "/contents/docs") + c.call("GET", R + "/contents/README.md?ref=main") + c.call("GET", R + f"/contents/README.md?ref={c1}") + c.call("GET", R + "/contents/src/lib.rs") + c.call("GET", R + "/contents/nope.txt") + c.call("GET", R + "/contents/README.md?ref=nope") + sha = c.call("GET", R + "/contents/README.md?ref=main", rec=False).json["sha"] + b64 = lambda s: base64.b64encode(s.encode()).decode() # noqa: E731 + c.call("POST", R + "/contents/new.txt", {"content": b64("new\n"), "message": "add new.txt", "branch": "main"}) + c.call("POST", R + "/contents/new.txt", {"content": b64("new\n"), "message": "add again", "branch": "main"}) + c.call("PUT", R + "/contents/README.md", {"content": b64("# hist\nupdated\n"), "message": "update readme", + "sha": sha, "branch": "main"}) + c.call("PUT", R + "/contents/README.md", {"content": b64("# hist\nstale\n"), "message": "stale update", + "sha": sha, "branch": "main"}) + c.call("PUT", R + "/contents/README.md", {"content": b64("# hist\nno sha\n"), "message": "no sha", "branch": "main"}) + c.call("POST", R + "/contents/branch-file.txt", {"content": b64("b\n"), "message": "to new branch", + "branch": "main", "new_branch": "api-branch"}) + sha2 = c.call("GET", R + "/contents/new.txt?ref=main", rec=False).json["sha"] + c.call("PUT", R + "/contents/new.txt", {"content": b64("new2\n"), "message": "update to new branch", "sha": sha2, + "branch": "main", "new_branch": "api-branch-2"}) + c.call("POST", R + "/contents/x.txt", {"content": b64("x\n"), "message": "dup branch", "branch": "main", + "new_branch": "api-branch"}) + c.call("GET", R + "/archive/main.zip", binary=True) + c.call("GET", R + "/archive/main.tar.gz", binary=True) + c.call("GET", R + f"/archive/{c1}.zip", binary=True) + c.call("GET", R + "/archive/nope.zip", binary=True) + + +def b64(s): + return base64.b64encode(s.encode()).decode() + + +def mkpr(c, repo, branch, files, title=None, rec=False, base="main", settle=False, as_="bot-scoped", + more=(), from_="origin/main"): + """Push `branch` (one commit per files dict) and open a PR for it. Returns (number, head_sha).""" + sha = c.push_branch(repo, branch, files, base=from_, msg=f"add {branch}") + for extra in more: + sha = c.push_branch(repo, branch, extra, base=f"origin/{branch}", msg=f"more on {branch}") + r = c.call("POST", f"/repos/acme/{repo}/pulls", {"title": title or f"PR {branch}", "body": f"body {branch}", + "head": branch, "base": base}, as_=as_, expect=201, rec=rec) + if settle: # Gitea answers "Please try again later" to a merge while the PR is still being checked + settled(c, repo, r.json["number"]) + return r.json["number"], sha + + +def get_pr(c, repo, n, rec=False, **kw): + return c.call("GET", f"/repos/acme/{repo}/pulls/{n}", rec=rec, expect=None if rec else 200, **kw).json + + +def wait_for(fn, timeout=10.0, step=0.25): + """Poll fn() until truthy. Returns (value, seconds).""" + t0 = time.time() + while True: + v = fn() + if v or time.time() - t0 > timeout: + return v, time.time() - t0 + time.sleep(step) + + +def settled(c, repo, n, timeout=40, pre=3.0): + """Wait until Gitea has finished (re)checking a PR. The API shows `mergeable: true` before the check + starts, so probe the merge endpoint with a bogus head_commit_id (never merges) until it stops saying + "Please try again later" twice in a row.""" + time.sleep(pre) + t0, good = time.time(), 0 + while time.time() - t0 < timeout: + r = c.call("POST", f"/repos/acme/{repo}/pulls/{n}/merge", {"Do": "merge", "head_commit_id": "0" * 40}, + as_="bot-scoped", rec=False, no_retry=True) + good = 0 if "try again later" in r.text.lower() else good + 1 + if good >= 2: + return True + time.sleep(1) + return False + + +def advance_main(c, repo, name): + sha = c.push_branch(repo, "adv-" + name, {name + ".txt": name + "\n"}, msg="advance " + name) + c.git(["push", "-q", "origin", f"{sha}:refs/heads/main"], cwd=c.wc(repo), rec=False) + return sha + + +def parents(c, repo, sha): + p = c.wc(repo) + c.git(["fetch", "-q", "origin"], cwd=p, rec=False) + return len(c.git(["rev-list", "--parents", "-n1", sha], cwd=p, rec=False)[1].split()) - 1 + + +def tokbasic(c, who): + return "none" if who == "none" else f"{who}-tokbasic" + + +@scenario("F", "pulls") +def sc_pulls(c): + c.mk_repo("prs") + R, A = "/repos/acme/prs", "bot-scoped" + c.push_branch("prs", "f1", {"f1.txt": "one\n"}) + c.push_branch("prs", "f2", {"f2.txt": "two\n"}) + new = {"title": "Add f1", "body": "First", "head": "f1", "base": "main"} + p1 = c.call("POST", R + "/pulls", new, as_=A, expect=201, volatile=["mergeable"]) + n1 = p1.json["number"] + c.call("POST", R + "/pulls", new, as_=A) + n2 = c.call("POST", R + "/pulls", {"title": "Add f2", "body": "Second", "head": "f2", "base": "main"}, + as_=A, expect=201, volatile=["mergeable"]).json["number"] + c.call("POST", R + "/pulls", {"title": "x", "head": "nope", "base": "main"}, as_=A) + c.call("POST", R + "/pulls", {"title": "x", "head": "main", "base": "main"}, as_=A) + c.call("POST", R + "/pulls", {"title": "x", "head": "f1", "base": "nope"}, as_=A) + c.call("POST", R + "/pulls", {"head": "f1", "base": "main"}, as_=A) + lst = c.call("GET", R + "/pulls?state=all&head=acme%3Af2&limit=50", as_=A) + c.note("head_filter_returned_heads", [x["head"]["ref"] for x in lst.json]) + c.call("GET", R + "/pulls?state=open&limit=50", as_=A) + c.call("GET", R + "/pulls?state=closed&limit=50", as_=A) + c.call("GET", R + f"/pulls/{n1}", as_=A, volatile=["mergeable"]) + c.call("GET", R + "/pulls/999", as_=A) + # head moves when a commit is pushed to the head branch + old = p1.json["head"]["sha"] + new_sha = c.push_branch("prs", "f1", {"f1b.txt": "more\n"}, base="origin/f1") + imm = get_pr(c, "prs", n1)["head"]["sha"] + c.note("head_sha_updated_immediately", imm == new_sha, strict=False) + ok, dt = wait_for(lambda: get_pr(c, "prs", n1)["head"]["sha"] == new_sha) + c.note("head_sha_updated_within_10s", bool(ok)) + final = c.call("GET", R + f"/pulls/{n1}", as_=A, volatile=["mergeable"]) + c.note("head_sha_changed_after_push", final.json["head"]["sha"] != old) + c.call("GET", R + f"/pulls?state=open&limit=50", as_=A) + c.call("GET", R + f"/pulls/{n1}.diff", as_=A) + c.call("GET", R + f"/pulls/{n1}.patch", as_=A, volatile=["$text"]) + c.call("GET", R + f"/pulls/{n1}/commits", as_=A) + c.call("GET", R + f"/pulls/{n1}/files", as_=A) + # close / reopen / edit + c.call("PATCH", R + f"/pulls/{n2}", {"state": "closed"}, as_=A, volatile=["mergeable"]) + c.call("GET", R + "/pulls?state=closed&limit=50", as_=A) + c.call("PATCH", R + f"/pulls/{n2}", {"state": "open"}, as_=A, volatile=["mergeable"]) + c.call("PATCH", R + f"/pulls/{n2}", {"title": "Renamed f2"}, as_=A, volatile=["mergeable"]) + # reviews + c.call("GET", R + f"/pulls/{n1}/reviews", as_=A) + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "looks fine", "event": "COMMENT"}) + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "please change", "event": "REQUEST_CHANGES"}, as_="alice") + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "now ok", "event": "APPROVED"}, as_="alice") + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "read only approves", "event": "APPROVED"}, as_="carol") + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "self approve", "event": "APPROVED"}, as_=A) + c.call("POST", R + f"/pulls/{n1}/reviews", {"body": "bogus", "event": "BOGUS"}, as_="alice") + revs = c.call("GET", R + f"/pulls/{n1}/reviews", as_=A) + c.call("GET", R + f"/pulls/{n1}/reviews?page=1&limit=25", as_=A) + rid = revs.json[0]["id"] + c.call("GET", R + f"/pulls/{n1}/reviews/{rid}", as_=A) + c.call("GET", R + f"/pulls/{n1}/reviews/{rid}/comments", as_=A) + for who in (A, "bot"): + c.call("GET", R + f"/issues/{n1}/comments", as_=who) + c.call("POST", R + f"/issues/{n1}/comments", {"body": "hello"}, as_=who) + c.call("GET", R + f"/issues/{n1}/comments", as_=who) + + +@scenario("G", "merge") +def sc_merge(c): + c.mk_repo("merges") + R, A = "/repos/acme/merges", "bot-scoped" + + def merge(n, body, **kw): + return c.call("POST", R + f"/pulls/{n}/merge", body, as_=A, **kw) + + def getpr(n, **kw): # `mergeable` flips while Gitea re-checks open PRs after every base change + return c.call("GET", R + f"/pulls/{n}", as_=A, volatile=["mergeable"], **kw) + + def settle_merged(n, label): + first = get_pr(c, "merges", n) + final, dt = wait_for(lambda: get_pr(c, "merges", n)["merged"] and get_pr(c, "merges", n)) + c.note(f"{label}_merged_immediately_after_merge_call", first["merged"], strict=False) + c.note(f"{label}_merged_within_10s", bool(final)) + c.note(f"{label}_seconds_to_merged", round(dt), strict=False) + return final or get_pr(c, "merges", n) + + # 1. clean merge + n1, s1 = mkpr(c, "merges", "m1", {"m1.txt": "1\n"}) + c.call("GET", R + f"/pulls/{n1}/merge", as_=A) + getpr(n1) + merge(n1, {"Do": "merge"}) + fin = settle_merged(n1, "merge") + c.call("GET", R + f"/pulls/{n1}", as_=A) + c.note("merged_flag_true_after_merge", fin["merged"] is True) + c.note("merge_commit_sha_present", bool(fin.get("merge_commit_sha"))) + c.note("merge_commit_parent_count", parents(c, "merges", fin["merge_commit_sha"]) if fin.get("merge_commit_sha") else -1) + c.note("head_sha_unchanged_after_merge", fin["head"]["sha"] == s1) + c.call("GET", R + f"/pulls/{n1}/merge", as_=A) + merge(n1, {"Do": "merge"}) # retry after success + # 1b. merge immediately after creation (check not finished): unrecorded, outcome kept as notes + nb, sb = mkpr(c, "merges", "m1b", {"m1b.txt": "b\n"}) + r = merge(nb, {"Do": "merge"}, rec=False, no_retry=True) + c.note("immediate_merge_status", r.status, strict=False) + c.note("immediate_merge_message", (r.json or {}).get("message", "") if r.is_json else r.text.strip()[:80], strict=False) + if r.status != 200: + merge(nb, {"Do": "merge"}, rec=False) + settle_merged(nb, "immediate") + c.call("GET", R + f"/pulls/{nb}", as_=A) + # 2. correct head_commit_id + n2, s2 = mkpr(c, "merges", "m2", {"m2.txt": "2\n"}) + merge(n2, {"Do": "merge", "head_commit_id": s2}) + settle_merged(n2, "headid") + # 3. wrong head_commit_id, then right one + n3, s3 = mkpr(c, "merges", "m3", {"m3.txt": "3\n"}) + merge(n3, {"Do": "merge", "head_commit_id": "0" * 40}) + merge(n3, {"Do": "merge", "head_commit_id": s2}) + getpr(n3) + merge(n3, {"Do": "merge", "head_commit_id": s3}) + settle_merged(n3, "wrongid_then_right") + # invalid Do / missing Do (this PR stays open; it is closed below so it does not slow later checks) + n6, s6 = mkpr(c, "merges", "m6", {"m6.txt": "6\n"}) + merge(n6, {"Do": "bogus"}) + merge(n6, {}) + c.call("PATCH", R + f"/pulls/{n6}", {"state": "closed"}, as_=A, rec=False, expect=201) + # 4. head already an ancestor of base (empty merge) + n4, s4 = mkpr(c, "merges", "m4", {"m4.txt": "4\n"}) + c.git(["push", "-q", "origin", f"{s4}:refs/heads/main"], cwd=c.wc("merges"), rec=False) + time.sleep(6) + getpr(n4) + merge(n4, {"Do": "merge"}, no_retry=True) + getpr(n4) + c.call("POST", R + "/pulls", {"title": "again", "head": "m1", "base": "main"}, as_=A) # head contained in base + c.call("PATCH", R + f"/pulls/{n4}", {"state": "closed"}, as_=A, rec=False) + # 5. conflict. Gitea answers a conflicting merge with the same "Please try again later" it uses while checking. + base_sha = c.push_branch("merges", "cbase", {"conflict.txt": "base\n"}) + c.git(["push", "-q", "origin", f"{base_sha}:refs/heads/main"], cwd=c.wc("merges"), rec=False) + na, _ = mkpr(c, "merges", "cf1", {"conflict.txt": "one\n"}) + nc, _ = mkpr(c, "merges", "cf2", {"conflict.txt": "two\n"}) + merge(na, {"Do": "merge"}) + time.sleep(8) + c.note("conflicting_pr_mergeable_after_8s", get_pr(c, "merges", nc)["mergeable"], strict=False) + c.call("GET", R + f"/pulls/{nc}", as_=A) + merge(nc, {"Do": "merge"}, no_retry=True) + c.call("PATCH", R + f"/pulls/{nc}", {"state": "closed"}, as_=A, rec=False) + # 6. closed PR + n5, _ = mkpr(c, "merges", "m5", {"m5.txt": "5\n"}) + c.call("PATCH", R + f"/pulls/{n5}", {"state": "closed"}, as_=A) + merge(n5, {"Do": "merge"}) + c.call("GET", R + f"/pulls/{n5}", as_=A) + # 7. merge styles + nq, _ = mkpr(c, "merges", "sq", {"sq1.txt": "a\n"}, more=[{"sq2.txt": "b\n"}]) + merge(nq, {"Do": "squash"}) + fin = settle_merged(nq, "squash") + c.call("GET", R + f"/pulls/{nq}", as_=A) + c.note("squash_parent_count", parents(c, "merges", fin["merge_commit_sha"]) if fin.get("merge_commit_sha") else -1) + nr, _ = mkpr(c, "merges", "rb", {"rb1.txt": "a\n"}, more=[{"rb2.txt": "b\n"}]) + advance_main(c, "merges", "adv1") + merge(nr, {"Do": "rebase"}) + fin = settle_merged(nr, "rebase") + c.call("GET", R + f"/pulls/{nr}", as_=A) + c.note("rebase_parent_count", parents(c, "merges", fin["merge_commit_sha"]) if fin.get("merge_commit_sha") else -1) + nm, _ = mkpr(c, "merges", "rm", {"rm1.txt": "a\n"}) + advance_main(c, "merges", "adv2") + merge(nm, {"Do": "rebase-merge"}) + fin = settle_merged(nm, "rebase_merge") + c.note("rebase_merge_parent_count", parents(c, "merges", fin["merge_commit_sha"]) if fin.get("merge_commit_sha") else -1) + nf, _ = mkpr(c, "merges", "ffo", {"ffo.txt": "a\n"}) + merge(nf, {"Do": "fast-forward-only"}) + fin = settle_merged(nf, "ff_only") + c.call("GET", R + f"/pulls/{nf}", as_=A) + c.note("ff_only_parent_count", parents(c, "merges", fin["merge_commit_sha"]) if fin.get("merge_commit_sha") else -1) + nf2, _ = mkpr(c, "merges", "ffo2", {"ffo2.txt": "a\n"}) + advance_main(c, "merges", "adv3") + time.sleep(6) + merge(nf2, {"Do": "fast-forward-only"}, no_retry=True) + getpr(nf2) + c.call("PATCH", R + f"/pulls/{nf2}", {"state": "closed"}, as_=A, rec=False) + # 8. required status checks + ns_, ss = mkpr(c, "merges", "sc1", {"sc1.txt": "s\n"}) + c.call("POST", R + "/branch_protections", {"branch_name": "main", "enable_push": False, + "enable_status_check": True, "status_check_contexts": ["ci/test"]}, + expect=201) + merge(ns_, {"Do": "merge"}, must_contain=["required status checks"]) + for state in ("pending", "failure"): + c.call("POST", R + f"/statuses/{ss}", {"state": state, "context": "ci/test"}, expect=201, rec=False) + merge(ns_, {"Do": "merge"}, must_contain=["required status checks"]) + c.call("POST", R + f"/statuses/{ss}", {"state": "success", "context": "ci/test"}, expect=201, rec=False) + merge(ns_, {"Do": "merge"}) + settle_merged(ns_, "status_gated") + c.call("DELETE", R + "/branch_protections/main") + + +@scenario("H", "statuses") +def sc_statuses(c): + c.mk_repo("status") + R = "/repos/acme/status" + shas = [c.head("status")] + [c.api_file("status", f"f{i}.txt", f"{i}\n", f"commit {i}") for i in range(1, 5)] + s0, s1, s2, s3, s4 = shas + + def post(sha, state, ctx, **kw): + body = {"state": state, "context": ctx, "description": f"{ctx} is {state}", "target_url": "http://example.invalid/run/1"} + return c.call("POST", R + f"/statuses/{sha}", body, **kw) + + def combined(sha): + return c.call("GET", R + f"/commits/{sha}/status?limit=50") + + r = combined(s0) + c.note("combined_state_no_statuses", r.json["state"]) + c.call("GET", R + f"/statuses/{s0}?limit=100") + c.call("GET", R + f"/commits/{s0}/statuses?limit=100") + # same context twice + post(s1, "pending", "ci/test", as_="bot-scoped", expect=201) + r = combined(s1) + c.note("combined_state_pending", r.json["state"]) + post(s1, "success", "ci/test", as_="bot-scoped", expect=201) + r = combined(s1) + c.note("combined_statuses_after_pending_then_success", len(r.json["statuses"])) + c.call("GET", R + f"/statuses/{s1}?limit=100") + r = c.call("GET", R + f"/commits/{s1}/statuses?limit=100") + c.note("list_history_len_after_two_posts", len(r.json)) + # mixes + post(s2, "success", "ci/test", expect=201) + post(s2, "failure", "ci/lint", expect=201) + c.note("combined_success_plus_failure", combined(s2).json["state"]) + post(s2, "success", "ci/lint", expect=201) + c.note("combined_all_success", combined(s2).json["state"]) + post(s2, "pending", "ci/other", expect=201) + c.note("combined_success_plus_pending", combined(s2).json["state"]) + post(s2, "error", "ci/err", expect=201) + c.note("combined_with_error", combined(s2).json["state"]) + combined(s2) + # state strings + for st in ("success", "pending", "failure", "error", "warning", "skipped", "bogus", ""): + post(s3, st, f"st-{st or 'empty'}") + combined(s3) + c.call("POST", R + f"/statuses/{s3}", {"state": "success"}) + c.call("POST", R + f"/statuses/{s3}", {"context": "no-state"}) + c.call("POST", R + f"/statuses/{s3}", {"state": "success", "context": "x" * 300}) + # unknown / malformed sha, no permission + post("0123456789abcdef0123456789abcdef01234567", "success", "ci/test") + post("nope", "success", "ci/test") + post(s4, "success", "ci/test", as_="carol") + post(s4, "success", "ci/test", as_="dave") + combined("0123456789abcdef0123456789abcdef01234567") + c.call("GET", R + "/commits/main/status?limit=50") + c.call("GET", R + "/statuses/main?limit=100") + + +@scenario("I", "branch-protection") +def sc_protection(c): + c.mk_repo("prot") + R = "/repos/acme/prot" + c.call("GET", R + "/branch_protections") + body = {"branch_name": "main", "enable_push": False, "enable_status_check": True, "status_check_contexts": ["ci/test"]} + c.call("POST", R + "/branch_protections", body, expect=201) + c.call("POST", R + "/branch_protections", body) + c.call("GET", R + "/branch_protections") + c.call("GET", R + "/branch_protections/main") + c.call("GET", R + "/branch_protections/nope") + c.call("POST", R + "/branch_protections", body, as_="bot") + p = c.wc("prot", "bot") + local_commit(c, p, {"direct.txt": "x\n"}) + c.git(["push", "origin", "HEAD:refs/heads/main"], cwd=p, name="push-protected-write-collab", + must_contain=["protected"]) + c.git(["push", c.git_url("prot", "admin"), "HEAD:refs/heads/main"], cwd=p, name="push-protected-admin") + c.git(["push", "origin", "HEAD:refs/heads/other"], cwd=p, name="push-other-branch") + c.git(["push", "origin", ":refs/heads/main"], cwd=p, name="delete-protected-by-push") + c.call("PATCH", R + "/branch_protections/main", {"enable_push": True}) + c.git(["push", "origin", "HEAD:refs/heads/main"], cwd=p, name="push-after-enable-push") + c.call("PATCH", R + "/branch_protections/main", {"enable_status_check": False}) + c.call("PATCH", R + "/branch_protections/nope", {"enable_push": True}) + c.call("DELETE", R + "/branch_protections/main") + c.call("GET", R + "/branch_protections/main") + c.call("DELETE", R + "/branch_protections/main") + + +@scenario("J", "smart-http") +def sc_smart(c): + c.mk_repo("smart") + wcp = c.wc("smart") + tok = c.principals["admin"]["secret"] + tip_old = c.head("smart") + c.push_branch("smart", "main", {"a.txt": "a\n"}) + c.push_branch("smart", "main", {"b.txt": "b\n"}) + tip = c.push_branch("smart", "main", {"a.txt": "a edited\n"}) # a.txt's first blob is history-only (partial clone) + dead = c.push_branch("smart", "tmp-dead", {"dead.txt": "x\n"}) + c.git(["push", "-q", "origin", ":refs/heads/tmp-dead"], cwd=wcp, rec=False) + url = lambda **kw: c.git_url("smart", **kw) # noqa: E731 + variants = [ + ("admin-token", dict(who="admin")), + ("oauth2-token", dict(who="admin", user="oauth2")), + ("bot-token", dict(who="bot")), + ("other-name-admin-token", dict(who="admin", user="someone")), + ("bot-name-admin-token", dict(who="admin", user="bot")), + ("token-as-username", dict(who="admin", user=tok, secret="")), + ("bad-token", dict(who="bad")), + ("no-credentials", dict(who="admin", user="", secret="")), + ] + for label, kw in variants: + u = url(**kw) + c.git(["clone", "-q", u, f"{c.tmp}/j-{label}"], name=f"clone-{label}") + c.git(["push", u, f"{tip}:refs/heads/j-{label}"], cwd=wcp, name=f"push-{label}") + c.git(["fetch", "-q", u, "main"], cwd=wcp, name=f"fetch-{label}") + plain = url(user="", secret="") + hdrs = [("hdr-basic-token-empty-password", "Authorization: Basic " + base64.b64encode(f"{tok}:".encode()).decode()), + ("hdr-token", "Authorization: token " + tok), ("hdr-bearer", "Authorization: Bearer " + tok)] + for label, h in hdrs: + c.git(["ls-remote", plain], name=f"ls-remote-{label}", extra_header=(label, h)) + # raw endpoints + for svc in ("git-upload-pack", "git-receive-pack"): + for who in ("none", "bad", "admin", "oauth2"): + c.call("GET", f"/acme/smart.git/info/refs?service={svc}", as_=tokbasic(c, who), api=False, + volatile=["$text"], must_contain=[f"service={svc}"] if who in ("admin", "oauth2") else None) + c.call("GET", "/acme/smart.git/info/refs?service=git-upload-pack", as_="admin-tokbasic", api=False, + headers={"Git-Protocol": "version=2"}, volatile=["$text"], must_contain=["version 2"]) + # fetch a commit by id + fd = c.tmp + "/jfetch" + c.git(["init", "-q", fd], rec=False) + for proto in ("0", "2"): + for label, sha in (("tip", tip), ("old", tip_old), ("dead", dead)): + c.git(["-c", f"protocol.version={proto}", "fetch", "-q", url(who="admin"), sha], cwd=fd, + name=f"fetch-sha-{label}-v{proto}") + for proto in ("0", "2"): + c.git(["-c", f"protocol.version={proto}", "ls-remote", url(who="admin")], name=f"ls-remote-v{proto}") + # partial and shallow clones + d = c.tmp + "/jpartial" + c.git(["clone", "--filter=blob:none", url(who="admin"), d], name="clone-filter-blob-none") + if os.path.isdir(d): + miss = c.git(["rev-list", "--objects", "--all", "--missing=print"], cwd=d, rec=False)[1].splitlines() + c.note("partial_clone_missing_objects", sum(1 for x in miss if x.startswith("?")) > 0) + c.note("partial_clone_promisor", c.git(["config", "--get", "remote.origin.promisor"], cwd=d, rec=False, ok=None)[1]) + d2 = c.tmp + "/jshallow" + c.git(["clone", "-q", "--depth=1", url(who="admin"), d2], name="clone-depth-1") + if os.path.isdir(d2): + c.note("shallow_clone", c.git(["rev-parse", "--is-shallow-repository"], cwd=d2, rec=False)[1]) + c.git(["fetch", "-q", "--unshallow"], cwd=d2, name="unshallow") + # force-with-lease + a = c.push_branch("smart", "flw-a", {"flw.txt": "A\n"}) + b = c.push_branch("smart", "flw-b", {"flw.txt": "B\n"}) + u = url(who="admin") + c.git(["push", "--force-with-lease=refs/heads/b:", u, f"{a}:refs/heads/b"], cwd=wcp, name="flw-absent-expected-and-absent") + c.git(["push", "--force-with-lease=refs/heads/b:", u, f"{b}:refs/heads/b"], cwd=wcp, name="flw-absent-expected-but-exists") + c.git(["push", f"--force-with-lease=refs/heads/b:{a}", u, f"{b}:refs/heads/b"], cwd=wcp, name="flw-correct-lease-nonff") + c.git(["push", f"--force-with-lease=refs/heads/b:{a}", u, f"{a}:refs/heads/b"], cwd=wcp, name="flw-stale-lease") + c.git(["push", u, f"{a}:refs/heads/b"], cwd=wcp, name="push-nonff-without-force") + # tags and deletes + c.git(["tag", "v1", tip], cwd=wcp, rec=False) + c.git(["tag", "-a", "v2", "-m", "release", tip], cwd=wcp, rec=False) + c.git(["push", u, "refs/tags/v1", "refs/tags/v2"], cwd=wcp, name="push-tags") + c.call("GET", "/repos/acme/smart/tags") + c.call("GET", "/repos/acme/smart/git/refs/tags") + c.git(["push", u, ":refs/tags/v1"], cwd=wcp, name="delete-tag-by-push") + c.call("GET", "/repos/acme/smart/tags") + c.git(["push", u, ":refs/heads/b"], cwd=wcp, name="delete-branch-by-push") + c.call("GET", "/repos/acme/smart/branches/b") + c.git(["push", u, ":refs/heads/main"], cwd=wcp, name="delete-default-branch-by-push") + c.call("GET", "/acme/smart.git/HEAD", as_="admin-tokbasic", api=False) + + +@scenario("K", "visibility-probing") +def sc_visibility(c): + c.mk_repo("vis") + for who in ("none", "bad", "dave", "carol"): + for repo in ("vis", "ghost"): + c.call("GET", f"/repos/acme/{repo}", as_=who) + c.call("GET", f"/repos/acme/{repo}/contents", as_=who) + c.call("GET", f"/repos/acme/{repo}/branches", as_=who) + c.call("GET", f"/acme/{repo}.git/info/refs?service=git-upload-pack", as_=tokbasic(c, who), api=False, + volatile=["$text"]) + c.call("GET", f"/acme/{repo}.git/info/refs?service=git-receive-pack", as_=tokbasic(c, who), api=False, + volatile=["$text"]) + for who in ("none", "dave"): + for repo in ("vis", "ghost"): + c.call("GET", f"/acme/{repo}", as_=tokbasic(c, who), api=False, volatile=["$text"]) + c.git(["ls-remote", c.git_url(repo, who)] if who != "none" else ["ls-remote", c.git_url(repo, "admin", user="", secret="")], + name=f"ls-remote-{repo}-{who}") + for who in ("none", "dave", "carol", "admin"): + c.call("GET", "/repos/search?limit=50&sort=alpha", as_=who) + c.call("GET", "/repos/search?q=vis&limit=50", as_="dave") + c.call("GET", "/user/repos?limit=50", as_="dave") + c.call("GET", "/orgs/acme", as_="dave") + c.call("GET", "/orgs/acme/repos", as_="dave") + c.call("GET", "/orgs/acme/repos?limit=50", as_="carol") + c.call("GET", "/orgs/acme/repos?limit=50", as_="none") + + +@scenario("L", "force-private") +def sc_force_private(c): + c.call("POST", "/orgs/acme/repos", {"name": "pub1", "private": False, "auto_init": True}) + c.call("GET", "/repos/acme/pub1") + c.call("PATCH", "/repos/acme/pub1", {"private": False}) + c.call("GET", "/repos/acme/pub1") + c.call("PATCH", "/repos/acme/pub1", {"private": True}) + c.call("PATCH", "/repos/acme/pub1", {"private": False}) + c.call("POST", "/orgs/acme/repos", {"name": "nodef", "auto_init": False}) + c.call("POST", "/user/repos", {"name": "pub2", "private": False}, as_="alice") + c.call("GET", "/repos/alice/pub2", as_="none") + c.call("GET", "/repos/alice/pub2", as_="dave") + c.call("POST", "/user/repos", {"name": "nodef2"}, as_="alice") + c.call("POST", "/orgs", {"username": "pubco", "visibility": "public"}) + c.call("GET", "/orgs/pubco", as_="dave") + c.call("POST", "/orgs/pubco/repos", {"name": "pubrepo", "private": False}) + c.call("GET", "/repos/pubco/pubrepo", as_="dave") + + +@scenario("M", "names") +def sc_names(c): + for name in ("Mixed", "mixed", "MIXED"): + c.call("POST", "/orgs/acme/repos", {"name": name, "auto_init": False}) + c.call("GET", "/repos/acme/mixed") + c.call("GET", "/repos/acme/Mixed") + c.call("GET", "/repos/ACME/mixed") + for name in (".", "..", ".hidden", "-dash", "trail.git", "wiki.wiki", "feed.rss", "feed.atom", "a b", "a..b", + "api", "admin", "user", "assets", "x" * 101, "ok_name-1.x", "ünï"): + c.call("POST", "/orgs/acme/repos", {"name": name, "auto_init": False}) + for n, i in (("Acme", 1), ("api", 2), ("admin", 3), ("user", 4), ("assets", 5), ("explore", 6), (".dot", 7), + ("-dash", 8), ("has space", 9), ("org.git", 10), ("x" * 41, 11)): + c.call("POST", "/orgs", {"username": n}) + for n in ("Alice", "api", "user", "-lead", ".lead", "trail.git", "bad name"): + c.call("POST", "/admin/users", {"username": n, "email": f"{n.replace(' ', '')}@example.invalid", "password": c.new_password(), + "must_change_password": False}) + c.call("POST", "/orgs/acme/repos", {"name": "rename-me", "auto_init": True}, expect=201) + c.call("PATCH", "/repos/acme/rename-me", {"name": "renamed"}) + c.call("GET", "/repos/acme/rename-me") + c.call("GET", "/repos/acme/renamed") + c.call("GET", "/repos/acme/rename-me", as_="dave") + c.call("GET", "/acme/rename-me.git/info/refs?service=git-upload-pack", as_="admin-tokbasic", api=False, + volatile=["$text"]) + c.git(["ls-remote", c.git_url("rename-me", "admin")], name="ls-remote-old-name") + c.git(["ls-remote", c.git_url("renamed", "admin")], name="ls-remote-new-name") + c.call("PATCH", "/repos/acme/renamed", {"name": "mixed"}) + c.call("PATCH", "/repos/acme/renamed", {"name": "Renamed"}) + c.call("PATCH", "/repos/acme/Renamed", {"name": "renamed"}) + + +@scenario("N", "default-branch") +def sc_default_branch(c): + c.mk_repo("dflt") + c.push_branch("dflt", "dev", {"dev.txt": "d\n"}) + R = "/repos/acme/dflt" + c.call("PATCH", R, {"default_branch": "nope"}) + c.call("PATCH", R, {"default_branch": "dev"}) + c.call("GET", R) + c.git(["ls-remote", "--symref", c.git_url("dflt"), "HEAD"], name="ls-remote-symref-after-change") + c.call("GET", R + "/branches") + c.call("GET", R + "/contents") + d = c.tmp + "/ndflt" + c.git(["clone", "-q", c.git_url("dflt"), d], name="clone-after-change") + if os.path.isdir(d): + c.note("clone_checked_out_branch", c.git(["symbolic-ref", "--short", "HEAD"], cwd=d, rec=False)[1]) + c.call("PATCH", R, {"default_branch": "main"}, retry_while=["already in queue"]) # async branch sync, 1.26 + c.call("DELETE", R + "/branches/dev") + # empty repo, first push name decides? + c.mk_repo("fresh1", auto_init=False) + c.call("GET", "/repos/acme/fresh1") + c.push_branch("fresh1", "trunk", {"t.txt": "t\n"}, base=None) + c.call("GET", "/repos/acme/fresh1") + c.git(["ls-remote", "--symref", c.git_url("fresh1"), "HEAD"], name="ls-remote-symref-trunk-first") + c.call("GET", "/repos/acme/fresh1/branches") + c.mk_repo("fresh2", auto_init=False) + c.push_branch("fresh2", "main", {"t.txt": "t\n"}, base=None) + c.call("GET", "/repos/acme/fresh2") + c.mk_repo("fresh3", auto_init=False, default_branch="develop") + c.call("GET", "/repos/acme/fresh3") + c.push_branch("fresh3", "main", {"t.txt": "t\n"}, base=None) + c.call("GET", "/repos/acme/fresh3") + c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-main-pushed-first") + c.push_branch("fresh3", "develop", {"u.txt": "u\n"}, base="origin/main") + c.call("GET", "/repos/acme/fresh3") + c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-develop-pushed-second") + + +@scenario("O", "pr-head-lifecycle") +def sc_pr_lifecycle(c): + c.mk_repo("life") + R, A = "/repos/acme/life", "bot-scoped" + wcp = c.wc("life") + url = c.git_url("life") + # 1. force-push the head branch + n1, s1 = mkpr(c, "life", "l1", {"l1.txt": "1\n"}) + c.call("GET", R + f"/pulls/{n1}", as_=A) + s1b = c.push_branch("life", "l1", {"l1-other.txt": "rewritten\n"}, base="origin/main", msg="rewritten") + ok, _ = wait_for(lambda: get_pr(c, "life", n1)["head"]["sha"] == s1b) + c.note("force_push_head_sha_follows", bool(ok)) + c.call("GET", R + f"/pulls/{n1}", as_=A) + c.call("GET", R + "/pulls?state=open&limit=50", as_=A) + c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs", cwd=wcp) + # 2. delete the head branch while the PR is open + n2, s2 = mkpr(c, "life", "l2", {"l2.txt": "2\n"}) + c.call("DELETE", R + "/branches/l2") + time.sleep(1) + c.call("GET", R + f"/pulls/{n2}", as_=A) + c.call("GET", R + "/pulls?state=open&limit=50", as_=A) + c.call("POST", R + f"/pulls/{n2}/merge", {"Do": "merge"}, as_=A) + c.call("GET", R + f"/pulls/{n2}", as_=A) + c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs-after-delete", cwd=wcp) + c.call("GET", R + f"/pulls/{n2}/commits", as_=A) + c.call("GET", R + f"/pulls/{n2}.diff", as_=A) + # 3. merge, then recreate the head branch at a new commit + n3, s3 = mkpr(c, "life", "l3", {"l3.txt": "3\n"}) + c.call("POST", R + f"/pulls/{n3}/merge", {"Do": "merge"}, as_=A) + wait_for(lambda: get_pr(c, "life", n3)["merged"]) + s3b = c.push_branch("life", "l3", {"l3-new.txt": "again\n"}, base="origin/main", msg="reborn l3") + time.sleep(2) + j = c.call("GET", R + f"/pulls/{n3}", as_=A) + c.note("merged_pr_head_sha_frozen", j.json["head"]["sha"] == s3) + c.note("merged_pr_head_sha_follows_new_branch", j.json["head"]["sha"] == s3b) + # 4. closed PR, then branch deleted + n4, _ = mkpr(c, "life", "l4", {"l4.txt": "4\n"}) + c.call("PATCH", R + f"/pulls/{n4}", {"state": "closed"}, as_=A) + c.call("DELETE", R + "/branches/l4") + time.sleep(1) + c.call("GET", R + f"/pulls/{n4}", as_=A) + c.call("PATCH", R + f"/pulls/{n4}", {"state": "open"}, as_=A) + c.call("GET", R + f"/pulls/{n4}", as_=A) + # 5. head commit pushed straight into base + n5, s5 = mkpr(c, "life", "l5", {"l5.txt": "5\n"}) + c.git(["push", "-q", "origin", f"{s5}:refs/heads/main"], cwd=wcp, rec=False) + ok, dt = wait_for(lambda: get_pr(c, "life", n5)["merged"], timeout=15) + c.note("direct_push_marks_pr_merged", bool(ok)) + c.note("direct_push_seconds_to_detect", round(dt), strict=False) + c.call("GET", R + f"/pulls/{n5}", as_=A) + c.call("GET", R + f"/pulls/{n5}/merge", as_=A) + + +@scenario("P", "pagination") +def sc_pagination(c): + c.mk_repo("pages") + R, A = "/repos/acme/pages", "bot-scoped" + for i in range(1, 6): + time.sleep(1.1) # distinct commit/update times: some Gitea versions order by time and tie-break randomly + mkpr(c, "pages", f"pg{i}", {f"pg{i}.txt": f"{i}\n"}, title=f"PR {i}", settle=0) + head = c.head("pages") + for i in range(1, 6): + time.sleep(1.1) # statuses created in the same second list in a random order on some versions + c.call("POST", R + f"/statuses/{head}", {"state": "success", "context": f"s{i}"}, expect=201, rec=False) + for pg in (1, 2, 3, 0, -1): + c.call("GET", R + f"/pulls?state=all&limit=2&page={pg}", as_=A) + for lim in (0, 100, 51, 50, -1): + r = c.call("GET", R + f"/pulls?state=all&limit={lim}", as_=A) + c.note(f"pulls_limit_{lim}_count", len(r.json) if isinstance(r.json, list) else -1) + c.call("GET", R + "/pulls?state=all&limit=abc", as_=A) + c.call("GET", R + "/pulls?state=all&sort=oldest&limit=5", as_=A) + c.call("GET", R + "/pulls?state=all&sort=newest&limit=5", as_=A) + c.call("GET", R + "/pulls?state=all&sort=recentupdate&limit=5", as_=A) + for pg in (1, 2, 3, 4): + c.call("GET", R + f"/branches?limit=2&page={pg}", as_=A) + p = c.wc("pages") + c.git(["push", "-q", "origin"] + [f"{head}:refs/heads/many{i:02d}" for i in range(55)], cwd=p, rec=False) + for q in ("", "?limit=100", "?limit=51", "?limit=0", "?page=2", "?limit=50&page=2"): + r = c.call("GET", R + "/branches" + q, as_=A, rec=False) # 55 verbose branch objects: keep counts only + c.note(f"branches{q or '_default'}_count", len(r.json)) + c.note(f"branches{q or '_default'}_headers", {h: r.headers[h].replace(c.base, "<base>") for h in ("x-total-count", "link") if h in r.headers}) + for pg in (1, 2, 3): + c.call("GET", R + f"/commits/{head}/statuses?limit=2&page={pg}", as_=A) + for pg in (1, 2): + c.call("GET", R + f"/statuses/{head}?limit=3&page={pg}", as_=A) + c.call("GET", R + f"/commits/{head}/status?limit=2&page=1", as_=A) + c.call("GET", R + f"/commits/{head}/status?limit=2&page=2", as_=A) + for i in range(1, 4): + c.mk_repo(f"pgrepo{i}", auto_init=False) + for pg in (1, 2, 3): + c.call("GET", f"/repos/search?q=pgrepo&limit=2&page={pg}&sort=alpha") + + +@scenario("Q", "protection-bypass") +def sc_bypass(c): + c.mk_repo("bypass") + R = "/repos/acme/bypass" + c.call("POST", R + "/branch_protections", {"branch_name": "main", "enable_push": False}, expect=201) + c.call("POST", R + "/contents/viaapi.txt", {"content": b64("x\n"), "message": "api to main", "branch": "main"}, as_="bot") + c.call("POST", R + "/contents/viaapi-admin.txt", {"content": b64("x\n"), "message": "api to main", "branch": "main"}) + sha = c.call("GET", R + "/contents/README.md", rec=False).json["sha"] + c.call("PUT", R + "/contents/README.md", {"content": b64("changed\n"), "message": "put to main", "sha": sha, + "branch": "main"}, as_="bot") + c.call("POST", R + "/contents/viapr.txt", {"content": b64("x\n"), "message": "api new branch", "branch": "main", + "new_branch": "q-api"}, as_="bot") + n1, _ = mkpr(c, "bypass", "q1", {"q1.txt": "1\n"}) + c.call("POST", R + f"/pulls/{n1}/merge", {"Do": "merge"}, as_="bot-scoped") + wait_for(lambda: get_pr(c, "bypass", n1)["merged"]) + # force-push on an unprotected branch + p = c.wc("bypass", "bot") + c.git(["fetch", "-q", "origin"], cwd=p, rec=False) + c.git(["checkout", "-q", "-B", "fp1", "origin/main"], cwd=p, rec=False) + local_commit(c, p, {"fp.txt": "1\n"}) + c.git(["push", "origin", "HEAD:refs/heads/fp1"], cwd=p, name="push-unprotected-branch") + c.git(["reset", "-q", "--hard", "origin/main"], cwd=p, rec=False) + local_commit(c, p, {"fp.txt": "2\n"}) + c.git(["push", "-f", "origin", "HEAD:refs/heads/fp1"], cwd=p, name="force-push-unprotected-branch") + # non-ff to the protected branch, before and after enable_push + c.git(["reset", "-q", "--hard", "origin/main~1"], cwd=p, rec=False) + local_commit(c, p, {"div.txt": "d\n"}) + c.git(["push", "origin", "HEAD:refs/heads/main"], cwd=p, name="nonff-protected-push-disabled") + c.call("PATCH", R + "/branch_protections/main", {"enable_push": True}) + c.git(["push", "origin", "HEAD:refs/heads/main"], cwd=p, name="nonff-protected-push-enabled") + c.git(["push", "-f", "origin", "HEAD:refs/heads/main"], cwd=p, name="force-protected-push-enabled") + c.git(["push", "origin", ":refs/heads/main"], cwd=p, name="delete-protected-push-enabled") + c.call("PATCH", R + "/branch_protections/main", {"enable_push": False}) + c.git(["push", "origin", ":refs/heads/main"], cwd=p, name="delete-protected-push-disabled") + c.call("DELETE", R + "/branches/main") + c.call("DELETE", R + "/branches/main", as_="bot") + c.call("GET", R + "/branches/main") + c.call("DELETE", R + "/branch_protections/main") + + +@scenario("R", "token-scope-edges") +def sc_token_edges(c): + c.call("POST", "/user/repos", {"name": "scoped2", "auto_init": True, "private": True}, as_="alice", expect=201, rec=False) + c.mk_token("alice", "po", ["public-only", "read:repository"], "alice-po", rec=True) + c.call("GET", "/repos/alice/scoped2", as_="alice-po") + c.call("GET", "/user", as_="alice-po") + c.call("GET", "/repos/search?limit=50", as_="alice-po") + c.call("POST", "/users/alice/tokens", {"name": "via-ro", "scopes": ["all"]}, as_="alice-ro") + c.call("POST", "/users/alice/tokens", {"name": "via-all-token", "scopes": ["all"]}, as_="alice") + c.principals["alice-tokpw"] = {"kind": "basic", "user": "alice", "secret": c.principals["alice"]["secret"]} + c.call("POST", "/users/alice/tokens", {"name": "via-token-as-password", "scopes": ["read:repository"]}, as_="alice-tokpw") + c.call("GET", "/users/alice/tokens", as_="alice-tokpw", volatile=["id", "name", "scopes"]) # order is a tie-break + c.principals["alice-pw-on-bot"] = {"kind": "basic", "user": "alice", "secret": c.pw["alice"]} + c.call("POST", "/users/bot/tokens", {"name": "stolen", "scopes": ["all"]}, as_="alice-pw-on-bot") + c.call("GET", "/users/bot/tokens", as_="alice-pw-on-bot") + c.call("POST", "/users/alice/tokens", {"name": "badscope", "scopes": ["nonsense"]}, as_="alice-basic") + c.call("POST", "/users/alice/tokens", {"name": "noscope"}, as_="alice-basic") + c.call("POST", "/users/alice/tokens", {"name": "", "scopes": ["all"]}, as_="alice-basic") + c.mk_token("alice", "wo", ["write:organization"], "alice-wo", rec=True) + c.call("POST", "/orgs", {"username": "botorg"}, as_="bot") + c.call("POST", "/orgs/botorg/repos", {"name": "intruder"}, as_="alice-wo") + c.call("POST", "/orgs/botorg/repos", {"name": "intruder"}, as_="alice") + c.call("POST", "/orgs/botorg/repos", {"name": "legit"}, as_="bot") + c.call("GET", "/orgs/botorg", as_="alice-wo") + c.call("GET", "/repos/alice/scoped2", as_="alice-wo") + c.call("GET", "/repos/alice/scoped2/branches", as_="bot-scoped") + + +@scenario("S", "ref-pushes") +def sc_refs(c): + c.mk_repo("refs") + R = "/repos/acme/refs" + n1, s1 = mkpr(c, "refs", "r1", {"r1.txt": "1\n"}, settle=1) + p = c.wc("refs", "bot") + c.git(["fetch", "-q", "origin"], cwd=p, rec=False) + c.git(["checkout", "-q", "-B", "work", "origin/main"], cwd=p, rec=False) + h = local_commit(c, p, {"w.txt": "w\n"}) + c.git(["tag", "-a", "annot", "-m", "annotated", h], cwd=p, rec=False) + tests = [ + ("replace-ref", f"{h}:refs/replace/{s1}"), + ("pull-1-head", f"{h}:refs/pull/1/head"), + ("pull-1-head-forced", f"+{h}:refs/pull/1/head"), + ("pull-999-head", f"{h}:refs/pull/999/head"), + ("heads-pull-1-head", f"{h}:refs/heads/pull/1/head"), + ("lightweight-tag", f"{h}:refs/tags/v-bot"), + ("annotated-tag", "refs/tags/annot:refs/tags/annot"), + ("notes-ref", f"{h}:refs/notes/commits"), + ("for-ref", f"{h}:refs/for/main"), + ("changes-ref", f"{h}:refs/changes/1/2"), + ("keep-around-ref", f"{h}:refs/keep-around/{h}"), + ("arbitrary-ref", f"{h}:refs/custom/thing"), + ("tag-delete", ":refs/tags/v-bot"), + ] + for name, spec in tests: + c.git(["push", "origin", spec], cwd=p, name="bot-push-" + name) + c.git(["push", c.git_url("refs", "carol"), f"{h}:refs/tags/v-carol"], cwd=p, name="read-collab-push-tag") + c.git(["ls-remote", c.git_url("refs", "admin")], name="ls-remote-all-refs") + c.call("GET", R + "/git/refs", as_="bot-scoped") + c.call("GET", R + "/tags", as_="bot-scoped") + c.call("GET", R + f"/pulls/{n1}", as_="bot-scoped", volatile=["mergeable"]) + + +@scenario("T", "merge-outcomes") +def sc_outcomes(c): + c.mk_repo("outcomes") + R, A = "/repos/acme/outcomes", "bot-scoped" + wcp = c.wc("outcomes") + + def getpr(n): + return c.call("GET", R + f"/pulls/{n}", as_=A, volatile=["mergeable"]) + + def try_pr(title, head): + """Open a PR and record what Gitea says about it and about merging it.""" + r = c.call("POST", R + "/pulls", {"title": title, "head": head, "base": "main"}, as_=A, volatile=["mergeable"]) + if r.status == 201: + n = r.json["number"] + time.sleep(6) + getpr(n) + c.call("POST", R + f"/pulls/{n}/merge", {"Do": "merge"}, as_=A, no_retry=True, + volatile=["$text"]) # 1.26 sends a truncated JSON body here, sometimes empty + getpr(n) + return r + + c.push_branch("outcomes", "orph", {"orph.txt": "o\n"}, base=None) + try_pr("unrelated", "orph") + c.push_branch("outcomes", "tid", {"t.txt": "t\n"}) + c.git(["rm", "-q", "t.txt"], cwd=wcp, rec=False) + c.git(["commit", "-q", "-m", "remove t"], cwd=wcp, rec=False) + c.git(["push", "-q", "-f", "origin", "HEAD:refs/heads/tid"], cwd=wcp, rec=False) + try_pr("same tree", "tid") + cont = c.push_branch("outcomes", "cont", {"cont.txt": "c\n"}) + c.git(["push", "-q", "origin", f"{cont}:refs/heads/main"], cwd=wcp, rec=False) + try_pr("contained", "cont") + n1, _ = mkpr(c, "outcomes", "ok1", {"ok1.txt": "1\n"}, more=[{"ok1b.txt": "2\n"}]) + getpr(n1) + c.call("POST", R + f"/pulls/{n1}/merge", {"Do": "merge"}, as_=A) + wait_for(lambda: get_pr(c, "outcomes", n1)["merged"]) + getpr(n1) + c.call("POST", R + f"/pulls/{n1}/merge", {"Do": "merge"}, as_=A) + c.push_branch("outcomes", "cbase", {"cf.txt": "base\n"}) + c.git(["push", "-q", "origin", "origin/cbase:refs/heads/main"], cwd=wcp, rec=False) + na, _ = mkpr(c, "outcomes", "cfa", {"cf.txt": "a\n"}) + nb, _ = mkpr(c, "outcomes", "cfb", {"cf.txt": "b\n"}) + c.call("POST", R + f"/pulls/{na}/merge", {"Do": "merge"}, as_=A) + time.sleep(8) + c.note("conflicting_pr_mergeable_after_8s", get_pr(c, "outcomes", nb)["mergeable"], strict=False) + c.call("GET", R + f"/pulls/{nb}", as_=A) + c.call("POST", R + f"/pulls/{nb}/merge", {"Do": "merge"}, as_=A, no_retry=True) + c.call("PATCH", R + f"/pulls/{nb}", {"state": "closed"}, as_=A) + c.call("GET", R + f"/pulls/{nb}", as_=A) + + +@scenario("U", "status-check-edges") +def sc_check_edges(c): + c.mk_repo("checks") + R, A = "/repos/acme/checks", "bot-scoped" + n1, h1 = mkpr(c, "checks", "u1", {"u1.txt": "1\n"}) + main_sha = c.head("checks") + c.call("POST", R + "/branch_protections", {"branch_name": "main", "enable_push": False, + "enable_status_check": True, "status_check_contexts": ["ci/test"]}, + expect=201) + + def post(sha, state, ctx): + c.call("POST", R + f"/statuses/{sha}", {"state": state, "context": ctx}, expect=201, rec=False) + + def merge(n): + return c.call("POST", R + f"/pulls/{n}/merge", {"Do": "merge"}, as_=A) + + post(main_sha, "success", "ci/test") + merge(n1) # a status exists, but on another commit + for state in ("warning", "error", "failure", "pending"): + post(h1, state, "ci/test") + merge(n1) + post(h1, "success", "ci/other") + merge(n1) # wrong context + post(h1, "skipped", "ci/test") + merge(n1) # `skipped` on the required context + wait_for(lambda: get_pr(c, "checks", n1)["merged"]) + c.call("GET", R + f"/pulls/{n1}", as_=A, volatile=["mergeable"]) + n3, h3 = mkpr(c, "checks", "u3", {"u3.txt": "3\n"}) + post(h3, "success", "ci/test") + merge(n3) + # status posted, then the head moves + n2, h2 = mkpr(c, "checks", "u2", {"u2.txt": "2\n"}) + post(h2, "success", "ci/test") + h2b = c.push_branch("checks", "u2", {"u2b.txt": "b\n"}, base="origin/u2") + wait_for(lambda: get_pr(c, "checks", n2)["head"]["sha"] == h2b) + merge(n2) + post(h2b, "success", "ci/test") + merge(n2) + c.call("DELETE", R + "/branch_protections/main") + + +@scenario("V", "smart-http-bytes") +def sc_wire(c): + import gzip + c.mk_repo("wire") + head = c.head("wire") + for svc in ("git-upload-pack", "git-receive-pack"): + c.call("GET", f"/acme/wire.git/info/refs?service={svc}", as_="admin-tokbasic", api=False, + track=("cache-control", "expires", "pragma"), volatile=["$text"], + must_contain=[f"001e# service=git-upload-pack\n0000" if svc == "git-upload-pack" + else "001f# service=git-receive-pack\n0000"]) + c.call("GET", f"/acme/wire.git/info/refs?service={svc}", api=False, as_="none", + track=("cache-control", "expires", "pragma"), volatile=["$text"]) + r = c.call("GET", "/acme/wire.git/info/refs?service=git-upload-pack", as_="admin-tokbasic", api=False, + headers={"Git-Protocol": "version=2"}, track=("cache-control",), volatile=["$text"]) + c.note("v2_advert_first_bytes", r.data[:46].decode("latin-1").replace("\n", "\\n")) + def advert_notes(svc, label): + r = c.call("GET", f"/acme/wire.git/info/refs?service={svc}", as_="admin-tokbasic", api=False, volatile=["$text"]) + d = r.data + c.note(f"{label}_preamble", d[:d.find(b"0000") + 4].decode("latin-1").replace("\n", "\\n")) + first = d[d.find(b"0000") + 4:] + caps = first.split(b"\x00", 1)[1].split(b"\n", 1)[0].decode("latin-1") if b"\x00" in first else "" + c.note(f"{label}_capabilities", re.sub(r"agent=git/\S+", "agent=git/<v>", caps), strict=False) + c.note(f"{label}_first_pkt_prefix", first[:4].decode("latin-1"), strict=False) + + advert_notes("git-upload-pack", "v0_upload") + advert_notes("git-receive-pack", "receive") + c.call("GET", "/acme/wire.git/HEAD", as_="admin-tokbasic", api=False) + c.call("GET", "/acme/wire.git/objects/info/packs", as_="admin-tokbasic", api=False) + want = f"want {head} side-band-64k ofs-delta\n".encode() + req = b"%04x" % (len(want) + 4) + want + b"0000" + b"0009done\n" + ct = {"Content-Type": "application/x-git-upload-pack-request", "Accept": "application/x-git-upload-pack-result"} + r1 = c.call("POST", "/acme/wire.git/git-upload-pack", data=req, headers=ct, as_="admin-tokbasic", api=False, + binary=True, track=("cache-control",)) + c.note("plain_upload_pack_response_head", r1.data[:8].decode("latin-1")) + r2 = c.call("POST", "/acme/wire.git/git-upload-pack", data=gzip.compress(req), + headers=dict(ct, **{"Content-Encoding": "gzip"}), as_="admin-tokbasic", api=False, binary=True, + track=("cache-control",)) + c.note("gzip_upload_pack_response_head", r2.data[:8].decode("latin-1")) + c.call("POST", "/acme/wire.git/git-upload-pack", data=req, headers=ct, as_="none", api=False) + c.call("POST", "/acme/wire.git/git-receive-pack", data=b"0000", as_="none", api=False, + headers={"Content-Type": "application/x-git-receive-pack-request"}) + c.call("POST", "/acme/wire.git/git-upload-pack", data=req, headers=ct, as_="dave-tokbasic", api=False) + + +# @@SCENARIOS@@ + +if __name__ == "__main__": + main() From 71906410b613fc6bd99155b8c8d9f6c01618569d Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 14:41:11 +0300 Subject: [PATCH 04/23] docs(forge): record Gitea findings, reconcile spec with fixtures --- crates/forge/conformance/FINDINGS.md | 161 ++++++++++++++++++ .../specs/2026-10-22-p38-forge-design.md | 101 ++++++++--- 2 files changed, 242 insertions(+), 20 deletions(-) create mode 100644 crates/forge/conformance/FINDINGS.md diff --git a/crates/forge/conformance/FINDINGS.md b/crates/forge/conformance/FINDINGS.md new file mode 100644 index 00000000..7cb6f2b7 --- /dev/null +++ b/crates/forge/conformance/FINDINGS.md @@ -0,0 +1,161 @@ +# Findings from the Gitea recordings + +Recorded 2026-10-22 against `gitea/gitea:1.22.6-rootless` and `1.26.2-rootless` with +`REQUIRE_SIGNIN_VIEW=true`, `FORCE_PRIVATE=true`, Actions, SSH and registration off. Scenario +letters match `fixtures/<version>/<letter>-*.json`. Every statement below was observed, not read +from source. "Both" means both versions answered the same. + +Each version passes its own fixtures (22/22). Checking the 1.22.6 fixtures against 1.26.2 passes 3/22 +(I, Q, V); every failure is a difference listed in the last table. + +## Headline answers + +- **Merge of a conflicting PR:** `405 {"message":"Please try again later"}`. Gitea sends the same text + while a PR is still being checked, so status and body cannot tell the two apart. +- **Wrong `head_commit_id`:** `409 {"message":"head out of date"}`. +- **Required status check not met:** merge is `405`; 1.22.6 says `not allowed to merge [reason: Not all + required status checks successful]`, 1.26.2 says `Not all required status checks successful`. Both + contain "required status checks". A push to a protected branch is refused by the pre-receive hook + (`Not allowed to push to protected branch main`, 1.22.6 prefixes `Gitea:`), for the admin too. +- **"already exists" texts:** repo `409 "The repository with the same name already exists."`; user and + org `422 "user already exists [name: x]"`; PR `409 "pull request already exists for these targets + [...]"`; branch `422 "branch already exists [name: ..]"`; file `422 "repository file already exists + [path: ..]"`; branch protection `403 "Branch protection already exist"`; token name `400 "access + token name has been used already"`; repo rename `422 "repository already exists [uname: acme, name: + mixed]"`. +- **Foreign token (valid, no access):** API `404`, identical to a missing repo (1.22.6 body + `{"errors":null,"message":"The target couldn't be found."}`, 1.26.2 `{"message":"not found"}`); git + `404 "Repository not found"`. One leak: `git-receive-pack` on a missing org repo answers `403 "Push to + create is not enabled for organizations."`. A bad or unknown token is `401` (1.22.6 `user does not + exist [uid: 0, name: ]`, 1.26.2 `invalid username, password or token`). Anonymous: API `403 "Only + signed in user is allowed to call APIs."`; git `401` with `WWW-Authenticate: Basic realm="Gitea"`. +- **Status de-duplication:** `commits/{sha}/status` keeps only the latest status per context; + `commits/{sha}/statuses` and `statuses/{sha}` return the full history. +- **Merged immediately?** Yes. A GET right after `POST merge` shows `merged:true` with + `merge_commit_sha`, and the merge commit has 2 parents. +- **`--force-with-lease`:** the check is client-side. With `refs/heads/b:` the push succeeds when `b` + is absent and is refused locally (`stale info`) when it exists. + +## By scenario + +**A to D (meta, users, repos, empty repo)** +- No `WWW-Authenticate` on API 401s. `PATCH /admin/users/{u}` is 200. Token create returns + `{id,name,sha1,token_last_eight,scopes}` (1.26.2 adds `created_at`). +- Scope enforcement is 403: a token with `read:user,read:organization,write:repository` cannot + `POST /user/repos` (needs `write:user`) and cannot touch issue comments (needs `read:issue` or + `write:issue`). +- The repo object has 58 keys; `permissions` is `{admin,push,pull}`. +- Empty repo: `commits` is `409 "Git Repository is empty."`; `GET branches` is 200 with the literal + body `null`; `GET contents` is `200 []` on 1.22.6 and 404 on 1.26.2. + +**E (history reads)** +- `git/refs/heads/{x}` is always an array. Contents `POST` is 201; `PUT` without `sha` is `422 + "[SHA]: Required"` on 1.22.6. Archive `.zip` starts `504b0304`, `.tar.gz` starts `1f8b0800`. + +**F (pull requests)** +- `PATCH pulls/{n}` returns **201**. The `head=` filter on the PR list is ignored. `head.sha` follows a + push immediately. A review with an unknown `event` is accepted as `PENDING`. A read-only + collaborator's `APPROVED` is accepted with `official:false`. Approving your own PR is `422 "approve + your own pull is not allowed"`. Issue comments need an all-scope token. + +**G and T (merge)** +- Clean merge: 200, empty body. Retry after success: 405 with an empty message (1.22.6) or `"The PR is + already merged"` (1.26.2). Closed PR: 404. `squash` and `rebase`: 1 parent; `rebase-merge`: 2. + `fast-forward-only` when base moved: **500 with `{"message":""}`**. Head already contained in base: + PR create accepted (201), merge 405. Unrelated histories: 409 with a `{Style,StdOut,StdErr,Err}` body + (truncated, not valid JSON, on 1.26.2). +- After any base change Gitea re-checks open PRs and answers 405 "try again later" for a few seconds. + +**H (statuses)** +- The POST response key is `status`, not `state`. Any state string is accepted and stored (`bogus`, + empty). An unknown sha is 500 (1.22.6) or 404 (1.26.2). Combined state: success plus failure is + `failure`; success plus pending is `pending`. No statuses: `state:""`, `sha:""` (1.22.6) or + `state:"pending"` with the real `sha` (1.26.2). + +**I and Q (protection)** +- Contents `POST`/`PUT` to a protected `main` is 403, even for the admin; with `new_branch` it is + allowed. A merge through a PR is allowed. A forced push to `main` is rejected even with + `enable_push:true`; deleting `main` by push is rejected. A force-push to an unprotected branch is + allowed. + +**J and V (git over HTTP)** +- Username is not checked: any username works with a valid token, as does the token as username with an + empty password, and `-c http.extraHeader` with `Basic base64(TOKEN:)`, `token TOKEN` or `Bearer + TOKEN`. A bad token gives `remote: Verify` (1.22.6) or `remote: Failed to authenticate user` + (1.26.2). `Git-Protocol: version=2` returns a v2 advert. Fetch by sha works for the tip, an old + commit and a deleted-branch tip over v0 and v2. `--filter=blob:none`, `--depth` and `--unshallow` + work. gzip request bodies behave like plain ones. `info/refs` headers: `Cache-Control: no-cache, + max-age=0, must-revalidate`, `Expires: Fri, 01 Jan 1980 00:00:00 GMT`, `Pragma: no-cache`. + +**K and L (visibility)** +- Anonymous and bad-token probing cannot tell a missing repo from a private one, except the + `receive-pack` case above. `PATCH private:false` is **accepted and stored** despite `FORCE_PRIVATE`; + only creation is forced to private. + +**M and N (names, default branch)** +- Duplicate repo names are case-insensitive (409). Rename leaves a redirect (307 on 1.22.6, 301 on + 1.26.2); the old name still works for git. `PATCH default_branch:"nope"` returns 200 and keeps `main`. + An empty repo whose first push is a branch other than the default still reports `empty:true`. + +**O and P (PR lifecycle, pagination)** +- Force-pushing the head moves `head.sha`. Deleting the head branch leaves the PR open; + `refs/pull/N/head` stays visible and merge is 404. A merged PR's `head.sha` is **not** frozen: it + follows a recreated branch. Pushing the head commit straight into base does **not** mark the PR + merged (still open after 15 s). Default page size is 30, max 50; `limit=0`, `-1` and `abc` fall back + to the default. PR lists are newest first. + +**R and S (token scopes, special refs)** +- A `public-only` token on a private repo is `403 "token scope is limited to public repos"` (1.22.6) or + `404` (1.26.2). Basic auth with a **token** as the password works on `/users/{u}/tokens`. Alice's + password on `/users/bot/tokens` is 403. A `write:organization` token cannot create a repo in an org + the user is not in. A write collaborator may push `refs/replace`, `notes`, `changes`, `keep-around`, + `custom` and tags. `refs/pull/*` and `refs/for/*` are rejected; a branch literally named + `pull/1/head` is accepted. + +**U (status-check edges)** +- A success on a different sha is refused. `warning`, `error`, `failure`, `pending` and a success on + another context are refused. **`skipped` on the required context allows the merge.** After the head + moves, the old status no longer counts. + +## Differences between the versions + +| Area | 1.22.6 | 1.26.2 | +| --- | --- | --- | +| Not-found API body | `{"errors":null,"message":"The target couldn't be found."}` | `{"message":"not found"}` | +| Bad-token API message | `user does not exist [uid: 0, name: ]` | `invalid username, password or token` | +| Scope-error text | `...scope(s): [write:repository]` | `...scope(s), required=[..], token scope=..` | +| Repo object | has `parent` and `repo_transfer` (null), `default_allow_maintainer_edit:false` | omits both, `default_allow_maintainer_edit:true` | +| PR object | `assignees`, `requested_reviewers` null; list items include `additions/deletions/changed_files` | arrays; list items omit those three | +| Email in comments and statuses | `bot@noreply.localhost` | `3+bot@noreply.localhost` | +| Token and branch-protection objects | no `created_at`, no `priority` | adds `created_at` and `priority` | +| Empty repo `GET contents` | `200 []` | 404 | +| `GET commits?sha=nope` | 500 | 404 with body `null` | +| `PUT contents` without sha | `422 [SHA]: Required` | `422 repository file already exists` | +| Merge retry after success | 405, empty message | 405 `The PR is already merged` | +| Combined status, no statuses | `state:""`, `sha:""` | `state:"pending"`, real `sha` | +| Combined status, unknown sha | 200 empty | 404 | +| Non-member's permissions in a private org | 404 | 200, all false | +| Read team member's `can_read` | true | false | +| Rename redirect | 307 | 301 | +| Web page for a user without access | 303 to login | 404 | +| Org name `admin` | 422 reserved | 201 | +| Repo names `..` and `a..b` | 422, 201 | 500 both | +| Delete default branch | `can not delete default branch` | `can not delete default or pull request target branch` | +| Unrelated-histories merge body | valid JSON | truncated or empty | +| Merge when head not yet checked | sometimes 405 | 200 in this run | + +## Not recorded or partial + +- SSH, LFS, Actions, webhooks, releases, labels, milestones and issues other than comments. +- `mergeable` is compared by type only, since it flips while a PR is checked; the conflict state is + kept as the note `conflicting_pr_mergeable_after_8s`. +- A non-fast-forward push to a protected branch is refused by the git client before it reaches the + server, so only the forced variants exercise the server. +- Which of two same-second rows lists first (tokens, statuses, branches) is arbitrary on some versions; + scenarios sleep 1.1 s between creations where order is compared. + +## Operational notes + +- A full record run takes about 2.5 to 3 minutes per version and needs a fresh server (the merge + scenario waits for Gitea's async PR checks and is the slowest, about 45 s). +- Fixtures are 3.5 MB across the two versions; compact JSON would roughly halve that. diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 6e7fb5ba..64f75060 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -168,16 +168,18 @@ their binary's, and `serve` never caches users or tokens across requests. | Route class | Accepted credential | Additional rule | |---|---|---| -| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. | Authenticated user must equal `{u}`. | +| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. (Recorded Gitea accepts a token as the Basic password on these routes, which lets a stolen read-only token mint a broader one; a deliberate departure.) | Authenticated user must equal `{u}`. | | `admin/*` | Token with `write:admin` (or `read:admin` for GETs), user must be site admin. | | -| Everything else | `token T`, `Bearer T`, or Basic with a **token** as password (any username). A Basic password is never tried as a user password. | Scope and actor rules below. | +| Everything else | `token T`, `Bearer T`, or Basic with a **token** as password under any username, or the token as username with an empty password (all recorded for git and API). A Basic password is never tried as a user password. | Scope and actor rules below. | The router table is the single source of authorization: every route declares its class, required scope category and level, and an actor/target rule. A route without a declaration does not compile; a test enumerates the table against the fixture routes. -- **Scopes:** `all`, `read|write:{repository,user,organization,admin,issue}`. - `public-only` is rejected at issuance (422), since every repo is private. +- **Scopes:** `all`, `read|write:{repository,user,organization,admin,issue}`, + `public-only`. Gitea accepts `public-only` and denies private repos to such a + token (403 or 404 by version); `sc-forge` accepts it and answers 404, so every + repo (all are private) is invisible to it. - **Actor rules:** a token acts as its user and is intersected with the user's access. Organization-scoped writes (`write:organization`, repo creation in an org) require the user to be an owner of that org or a site admin; a user can @@ -186,12 +188,17 @@ their binary's, and `serve` never caches users or tokens across requests. - **Repository access** = site admin, org owner, repo owner, or collaborator grant (read < write < admin). Org membership alone grants nothing. No teams. `POST /pulls/{n}/merge` requires write. -- **Existence.** Anonymous and foreign callers get the same response for a - nonexistent repo and an unauthorized private repo wherever no client asserts a - difference (the fixtures include both cases for the API and for git); - `repos/search` and every listing filter by the caller's access. +- **Existence.** Recorded Gitea behaviour is kept: a valid token without access + gets 404, identical to a missing repo (API and git); a bad or unknown token + gets 401; anonymous API calls get 403 `Only signed in user is allowed to call + APIs.` and anonymous git gets 401 with `WWW-Authenticate: Basic realm=...`. + Gitea leaks one case (receive-pack on a missing org repo answers 403 "Push to + create is not enabled"); `sc-forge` answers 404 there. `repos/search` and every + listing filter by the caller's access. - **`private: false`** on create or PATCH is accepted, stored as true and - returned as true (`FORCE_PRIVATE`). There is no anonymous read. + returned as true. (Recorded Gitea forces it only on create and stores `false` + from a PATCH; that is an anonymous-read hole `sc-forge` does not copy.) There + is no anonymous read. - **Rate limits and bind gate.** Password attempts back off exponentially per login and are capped per source (not a lockout; a service account must not be lockable by a stranger); argon2 runs under a global concurrency cap. The @@ -293,15 +300,24 @@ write access. Steps, all on captured object ids: differs from `head_oid`, answer the recorded stale-head response. 2. If the PR is already merged or closed, answer the recorded response. If `head_oid` is an ancestor of `base_oid`, answer Gitea's "nothing to merge" - form (405, "Please try again later", `changed_files` 0). + form (405, "Please try again later", `changed_files` 0). A merge of a closed + PR is 404; a retry after success is 405 `The PR is already merged`; a missing + head branch is 404. 3. Required status check: if the base has a protection rule with `enable_status_check`, every context in `status_check_contexts` must have a - latest status of `success` on **`head_oid`** (missing, pending, failure and - error refuse with the recorded 405 or 409 and the text "required status - checks"). No admin bypass in v1. + latest status of `success` or `skipped` on **`head_oid`** (recorded: `skipped` + satisfies the requirement; `warning`, `error`, `failure`, `pending`, a status + on another sha or another context do not). A refusal is 405 with a message + containing "Not all required status checks successful". No admin bypass in v1. 4. `git merge-tree --write-tree base_oid head_oid`: exit 0 is clean, exit 1 is a - conflict (answer the recorded conflict form), anything else is an internal - error. Never infer from output presence. + conflict, anything else is an internal error (unrelated histories answer 409 + with a valid JSON body). Never infer from output presence. **Deliberate + departure:** a conflict answers `409 {"message":"Merge conflict: <paths>"}`. + Recorded Gitea answers 405 "Please try again later" for a conflict, which is + indistinguishable from "still checking" and makes a client retry until its + deadline; the agent runtime already classifies 405 or 409 containing + "conflict" as a worker-fixable conflict, so the explicit form is both + compatible and strictly better. 5. Insert a `merge_intents` row (PR, `base_oid`, `head_oid`, `merge_oid` computed by `commit-tree -p base_oid -p head_oid`, state `pending`). 6. One `git update-ref --stdin` transaction: `start`, `verify refs/heads/<head> @@ -338,8 +354,13 @@ decided from the recorded fixtures. Any caller with write on the repo may post any context (Gitea's trust boundary: the writer is trusted, status contexts are not attestations; stated here so it is -not mistaken for one). "Latest" per context is the highest insertion id. The -combined `state` and `X-Total-Count` follow the fixtures. +not mistaken for one). "Latest" per context is the highest insertion id. Recorded +facts: the POST response key is `status`; the combined endpoint lists only the +latest per context (success plus failure is `failure`, success plus pending is +`pending`); the history endpoints list everything. **Departures:** unknown state +strings answer 422 (Gitea stores any string); an unknown sha answers 404 (1.22.6 +answers 500, 1.26.2 404); a repo with no statuses answers `state: ""` as +1.22.6 does. ### Repository lifecycle @@ -426,11 +447,51 @@ fixtures replace the clients' hand-authored transcripts, several of which are labelled authored, not recorded. CI runs `check` against the in-tree server on every PR. +## Contract decisions from the recordings + +`crates/forge/conformance/FINDINGS.md` holds every observed status, body and +header. Decisions drawn from it, beyond those stated in the sections above: + +- **Version rule.** Follow 1.22.6 unless it answers 500, an empty message or a + malformed body; then follow 1.26.2. +- **Pull requests.** `PATCH pulls/{n}` answers 201 (as Gitea does). The `head=` + filter on the list is ignored; lists are newest first, default page 30, cap 50, + a bad `limit` falls back to the default. Force-pushing the head moves `head.sha` + on an open PR; **a merged PR's `head.sha` is frozen at merge** (Gitea's follows + a recreated branch; the agent runtime compares it against a frozen landing sha, + so frozen is the safe reading). Deleting the head branch leaves the PR open. + Pushing the head commit straight into base does not mark the PR merged, so there + is no manual-merge detection. Approving your own PR is 422. Unknown review + `event` values are stored as `PENDING`. +- **Protection.** Contents writes to a protected branch answer 403 (also for + admins; allowed with `new_branch`); force pushes and deletions of a protected + branch are refused; force pushes to unprotected branches are allowed; a merge + through a PR is allowed. Push refusal text: `Not allowed to push to protected + branch <name>`. +- **Refs a writer may push.** Recorded Gitea lets a write collaborator push + `refs/replace/*`, `notes`, `changes` and custom namespaces. `sc-forge` allows + `refs/heads/*` and `refs/tags/*` only (departure; see "Git transport"). +- **Empty repos.** `commits` 409 `Git Repository is empty.`; `branches` 200 with + body `null`; `contents` 200 `[]`. A first push to a branch other than the + default branch leaves `empty: true` (computed from `HEAD`). +- **Names.** Duplicate repo names are case-insensitive (409). Rename answers 422 + (departure; Gitea redirects). `PATCH default_branch` naming a missing branch + answers 422 (Gitea silently keeps the old one). Reserved names are the union of + both versions' lists plus `api`. +- **Messages to reproduce** (clients match on them): repo duplicate 409 `The + repository with the same name already exists.`; user and org duplicate 422 + `user already exists [name: x]`; stale head 409 `head out of date`; protection + push refusal text above; protection merge refusal text above. +- **Departures, in one place:** conflict is 409 not 405; `private:false` is not + stored; token routes refuse tokens; `refs/*` restricted; unknown status states + and unknown shas are errors; rename and `Do` other than `merge` are 422; a + merged PR's head is frozen; receive-pack on a missing repo is 404. Each is + covered by a fixture that `check` marks as an expected difference. + ## Open questions -1. Foreign-token and nonexistent-repo statuses, merge refusal texts, the - manually-merged PR detection, and paging order come from the recorded - fixtures and are folded into this spec when F0 closes. +1. The `check` expected-difference list (the departures above) needs an explicit + per-exchange override format in the harness before F1 can pass `check`. 2. TLS: all known deployments terminate at a proxy or private network. Add `tlsio` only if one needs it (it needs a sync-to-hyper adapter). 3. Which Gitea version string `/version` reports; whether `has_actions` PATCH is From 0cfd3a9556072dae8d5b0b6a876d657b250a0d5d Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 14:50:56 +0300 Subject: [PATCH 05/23] docs(forge): resolve review findings in spec and ADR-0058 --- ...058-sc-forge-gitea-compatible-git-forge.md | 16 +++-- .../specs/2026-10-22-p38-forge-design.md | 71 ++++++++++++------- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md index 5233d0a3..0ad31aa6 100644 --- a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md +++ b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md @@ -33,7 +33,7 @@ limits, but no forge. It does not host Git repos for others, and alternative is rejected for now: P9 export fails closed on encrypted content and private branches are refused at the Git bridge, so `.sc/` repos behind a Git face would carry the cost of both models without delivering either's - guarantees. Consequence, stated plainly: **hosted Project repos get none of + guarantees. Consequence, stated plainly: **hosted project repos get none of src-control's committed secrets, per-file encryption or private branches.** Revisit when an sc-native transport exists for the agent runtime. 2. **The API is a Gitea-compatible subset, not a new API.** Clients then switch @@ -74,7 +74,8 @@ limits, but no forge. It does not host Git repos for others, and publishes it, so "the head I checked is the head I merged" is atomic. A `merge_intents` journal row written before the ref update makes the Git/SQLite gap recoverable: startup and retries finalize or abort from the ref - state. The merge is the only path allowed onto a protected branch. This gives + state. A merge through a PR is always allowed onto a protected branch; direct updates + follow the rule's `enable_push` (required status contexts gate merges only). This gives clients a real merge commit (the ancestry rule of their landing check) and `merged: true` on the next read. 7a. **Protection is one policy for every mutation path.** Receive-pack @@ -87,7 +88,7 @@ limits, but no forge. It does not host Git repos for others, and 7b. **Credentials are strictly separated by route.** Token routes accept a user's password only (never a token) and only for that user; every other route accepts a token only (a Basic password is never tried as a password). - Scopes cannot be raised by a token; `public-only` is rejected at issuance. + Scopes cannot be raised by a token; `public-only` tokens are accepted and denied every (private) repo. Repo identity on disk is an immutable id, so delete-and-recreate cannot alias a running process. 8. **Token format and storage.** Tokens are 40 hex characters (the length @@ -128,7 +129,7 @@ limits, but no forge. It does not host Git repos for others, and - **`.sc/` repos behind a Git bridge:** see decision 1. - **Keep running Gitea:** the operating cost and its Actions, UI and SSH surface are the problem; the used surface is small. -- **A new REST API with a Portal provider from day one:** the clients are +- **A new REST API with a portal provider from day one:** the clients are already written against Gitea; compatibility is the cheap way to ship, and a native provider can follow once the forge exists. - **In-process SSH server (`russh`):** large dependency for a transport nobody @@ -139,6 +140,7 @@ limits, but no forge. It does not host Git repos for others, and ## Open -Foreign-token status codes and merge message texts come from the recorded -fixtures. Whether `has_actions` PATCH is accepted or refused, the `/version` -string, and an eventual TLS option are decided during F1 and F5. +Whether `has_actions` PATCH is accepted or refused, the `/version` string, and +an eventual TLS option are decided during F1 and F5. Foreign-token codes, merge +message texts and the deliberate departures from Gitea are recorded in the spec +("Contract decisions from the recordings") and `crates/forge/conformance/`. diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 64f75060..35b10eab 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -34,8 +34,10 @@ flows against `sc-forge`. Wire compatibility is the means, not the product. - **High availability.** One writer process, one data volume. - **Storing `.sc/` repos.** Hosted repos are bare Git (ADR-0058, decision 1). - **Changing Gitea's behaviour for the better.** Where a client matches on a - Gitea quirk (error text, status code), `sc-forge` reproduces it. The one - deliberate departure: merge is synchronous (see "Merge"). + Gitea quirk (error text, status code), `sc-forge` reproduces it. Deliberate + departures (synchronous merge among them) are listed in one place, under + "Contract decisions from the recordings", and are enforced by a + `departures.json` override file in the harness. ## What the clients need @@ -168,9 +170,9 @@ their binary's, and `serve` never caches users or tokens across requests. | Route class | Accepted credential | Additional rule | |---|---|---| -| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. (Recorded Gitea accepts a token as the Basic password on these routes, which lets a stolen read-only token mint a broader one; a deliberate departure.) | Authenticated user must equal `{u}`. | +| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. (Recorded Gitea accepts an all-scope token as the Basic password on these routes. Whether a read-only token can mint a broader one that way was not recorded in the first pass; accepting any token here would let it, so this is a defensive departure. Site admins are held to the same rule until a recording shows otherwise.) | Authenticated user must equal `{u}`. | | `admin/*` | Token with `write:admin` (or `read:admin` for GETs), user must be site admin. | | -| Everything else | `token T`, `Bearer T`, or Basic with a **token** as password under any username, or the token as username with an empty password (all recorded for git and API). A Basic password is never tried as a user password. | Scope and actor rules below. | +| Everything else | `token T`, `Bearer T`, or Basic with a **token** as password under any username, or the token as username with an empty password (recorded for git; API recordings for Bearer and token-as-username are in the follow-up scenarios). A Basic password is never tried as a user password. | Scope and actor rules below. | The router table is the single source of authorization: every route declares its class, required scope category and level, and an actor/target @@ -178,8 +180,9 @@ their binary's, and `serve` never caches users or tokens across requests. table against the fixture routes. - **Scopes:** `all`, `read|write:{repository,user,organization,admin,issue}`, `public-only`. Gitea accepts `public-only` and denies private repos to such a - token (403 or 404 by version); `sc-forge` accepts it and answers 404, so every - repo (all are private) is invisible to it. + token (403 on 1.22.6, 404 on 1.26.2); `sc-forge` accepts it and follows 1.22.6 + (403 `token scope is limited to public repos`), so every repo (all are private) + is denied to it. - **Actor rules:** a token acts as its user and is intersected with the user's access. Organization-scoped writes (`write:organization`, repo creation in an org) require the user to be an owner of that org or a site admin; a user can @@ -239,10 +242,14 @@ line (`Status:` and headers), then the body is streamed. - **Branch protection applies to every mutation path, one policy function** shared by pre-receive, contents writes and merges: a protected branch refuses direct updates from receive-pack and contents writes when `enable_push` is - false, refuses non-fast-forward and deletion always, and permits only the - server-side merge path (which has its own checks). The default branch is not - protected unless a rule says so (Gitea behaviour). Deleting the default branch - is refused. + false and refuses non-fast-forward updates and deletion always. With + `enable_push: true` a fast-forward push is accepted, and (recorded) it is not + gated by `enable_status_check`: the required contexts gate **merges** only, + because a status cannot exist for a commit that has not been pushed yet. An + operator who wants no direct pushes sets `enable_push: false`. A merge through + a PR is allowed and has its own checks. The default branch is not protected + unless a rule says so (Gitea behaviour). Deleting the default branch is + refused. - **Policy linearization:** authorization and protection are evaluated once when a request starts (the hook re-reads protection at ref-update time under one read transaction). A revocation or a new rule affects requests that start after @@ -310,8 +317,11 @@ write access. Steps, all on captured object ids: on another sha or another context do not). A refusal is 405 with a message containing "Not all required status checks successful". No admin bypass in v1. 4. `git merge-tree --write-tree base_oid head_oid`: exit 0 is clean, exit 1 is a - conflict, anything else is an internal error (unrelated histories answer 409 - with a valid JSON body). Never infer from output presence. **Deliberate + conflict, anything else is an internal error. Unrelated histories make + `merge-tree` exit with a fatal status, so a `merge-base` check runs first and + answers `409 {"message":"Merge conflict: unrelated histories"}` (recorded + Gitea sends a body with no `message` key, which no client can classify). + Never infer from output presence. **Deliberate departure:** a conflict answers `409 {"message":"Merge conflict: <paths>"}`. Recorded Gitea answers 405 "Please try again later" for a conflict, which is indistinguishable from "still checking" and makes a client retry until its @@ -331,8 +341,11 @@ write access. Steps, all on captured object ids: 200. After this the PR reads `merged: true` immediately. **Crash recovery.** Git and SQLite cannot commit together, so the intent row is -the journal. On startup and on any read or merge retry that finds a `pending` -intent: if the base ref equals `merge_oid`, finalize the PR as merged; if it +the journal. Recovery runs at startup (before the listener accepts) and, +afterwards, only while holding the per-repo write lock, which a live merge holds +for steps 5 to 7; a read that finds a `pending` intent while the lock is held +treats the PR as not yet merged and does not touch the intent, so recovery can +never abort a merge that is still in flight. On a `pending` intent: if the base ref equals `merge_oid`, finalize the PR as merged; if it equals `base_oid`, mark the intent aborted; otherwise (base moved on) the merge landed if `merge_oid` is an ancestor of the base, else aborted. A retried merge request therefore recovers the original outcome instead of reporting "nothing to @@ -346,9 +359,9 @@ use the cache and compute misses under a small concurrency limit. **PR head lifecycle.** An open PR's `head.sha` is the live branch tip (a force-push shows immediately); a merged PR's `head.sha` is frozen at merge; a -closed PR keeps its last head through `refs/forge/pull/<n>/head`. Whether a -push of the head commit straight into base marks the PR merged, as Gitea does, is -decided from the recorded fixtures. +closed PR keeps its last head through `refs/forge/pull/<n>/head`. Pushing the +head commit straight into base does not mark the PR merged (recorded; the +agent runtime's landing check handles a trunk that contains the commits). ### Statuses @@ -427,7 +440,7 @@ tests driving `sc-forge` with real `git`. | F3 | Content API | Branches, refs, commits, git commits/trees/diff, contents GET/POST/PUT with the protection policy and path rules, archive zip. | | F4 | PRs, statuses, merge, protection | Pulls, reviews, comments, statuses, protection, merge with intents and recovery, PR retention refs. **Threat-model pass #2 (server-side writes, merge races, contents bypass)**, kill -9 restore test, protection-bypass tests across receive-pack, contents and merge. | | F5 | Ops | Container image (current git, no sshd), cgroup limits documented, structured logs without secrets, maintenance gc, SIGTERM drain test, free-space admission test, bind-gate tests. | -| F6 | Conformance on the first deployment | The consumers' own end-to-end flows run with only the Project Git host swapped. src-control's exit gate; not reproducible from this repo's CI. | +| F6 | Conformance on the first deployment | The consumers' own end-to-end flows run with only the project Git host swapped. src-control's exit gate; not reproducible from this repo's CI. | ## Conformance @@ -482,16 +495,24 @@ header. Decisions drawn from it, beyond those stated in the sections above: repository with the same name already exists.`; user and org duplicate 422 `user already exists [name: x]`; stale head 409 `head out of date`; protection push refusal text above; protection merge refusal text above. -- **Departures, in one place:** conflict is 409 not 405; `private:false` is not - stored; token routes refuse tokens; `refs/*` restricted; unknown status states - and unknown shas are errors; rename and `Do` other than `merge` are 422; a - merged PR's head is frozen; receive-pack on a missing repo is 404. Each is - covered by a fixture that `check` marks as an expected difference. +- **Departures, in one place** (each is an entry in `departures.json`, and an + override that stops matching an exchange fails the run): synchronous merge (no + "still checking" 405); a conflict is 409 with "conflict" in the message, not + 405 "try again later"; unrelated histories answer a classifiable 409; `Do` + other than `merge` is 422 (Gitea: 500 for `fast-forward-only`, other styles + accepted); `private:false` is not stored; token routes refuse tokens and + require the caller to be `{u}`; client pushes limited to `refs/heads/*` and + `refs/tags/*`; unknown status states are 422; repo rename is 422; `PATCH + default_branch` to a missing branch is 422; a merged PR's head is frozen; + receive-pack on a missing repo is 404. Not departures, by the version rule: + unknown sha on a status POST is 404 (1.26.2); `public-only` is 403 (1.22.6); + the combined status of an unknown sha is `200` empty (1.22.6). ## Open questions -1. The `check` expected-difference list (the departures above) needs an explicit - per-exchange override format in the harness before F1 can pass `check`. +1. Site admins minting tokens for other users and a read-only token used as a + Basic password on token routes are recorded in the follow-up scenarios; the + spec's rule for them is provisional until those land. 2. TLS: all known deployments terminate at a proxy or private network. Add `tlsio` only if one needs it (it needs a sync-to-hyper adapter). 3. Which Gitea version string `/version` reports; whether `has_actions` PATCH is From c2a713e0b4e9cbdbd54edc29564fd77e587ec9af Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 15:33:38 +0300 Subject: [PATCH 06/23] test(forge): conformance checker compares error text, git refusals and departures; settle racy reads check now compares normalized error messages and git refusal lines, takes reviewed departures (departures.json, stale entries fail), polls async repo state, treats timing notes as informational, and reports fixture exceptions by text. New scenarios W (protected contents) and X (auth forms, token minting); H and T gain bogus-only status and the exact unrelated-history merge body. gitea-up.sh surfaces docker errors and retries only on port-in-use. Fixtures re-recorded for 1.22.6 and 1.26.2. --- crates/forge/conformance/README.md | 49 +- crates/forge/conformance/departures.json | 331 ++++ .../conformance/fixtures/1.22.6/C-repos.json | 25 +- .../fixtures/1.22.6/E-history-reads.json | 11 +- .../conformance/fixtures/1.22.6/F-pulls.json | 10 +- .../conformance/fixtures/1.22.6/G-merge.json | 26 +- .../fixtures/1.22.6/H-statuses.json | 456 ++++- .../fixtures/1.22.6/I-branch-protection.json | 19 +- .../fixtures/1.22.6/J-smart-http.json | 58 +- .../fixtures/1.22.6/K-visibility-probing.json | 22 +- .../fixtures/1.22.6/N-default-branch.json | 119 +- .../fixtures/1.22.6/O-pr-head-lifecycle.json | 24 +- .../fixtures/1.22.6/Q-protection-bypass.json | 33 +- .../fixtures/1.22.6/R-token-scope-edges.json | 8 +- .../fixtures/1.22.6/S-ref-pushes.json | 37 +- .../fixtures/1.22.6/T-merge-outcomes.json | 12 +- .../fixtures/1.22.6/W-protected-contents.json | 662 +++++++ .../fixtures/1.22.6/X-auth-forms.json | 1568 ++++++++++++++++ .../conformance/fixtures/1.22.6/meta.json | 4 +- .../conformance/fixtures/1.26.2/A-meta.json | 4 +- .../fixtures/1.26.2/B-users-orgs-tokens.json | 8 +- .../conformance/fixtures/1.26.2/C-repos.json | 33 +- .../fixtures/1.26.2/D-empty-repo.json | 8 +- .../fixtures/1.26.2/E-history-reads.json | 15 +- .../conformance/fixtures/1.26.2/G-merge.json | 22 +- .../fixtures/1.26.2/H-statuses.json | 328 +++- .../fixtures/1.26.2/I-branch-protection.json | 27 +- .../fixtures/1.26.2/J-smart-http.json | 58 +- .../fixtures/1.26.2/K-visibility-probing.json | 46 +- .../fixtures/1.26.2/L-force-private.json | 4 +- .../fixtures/1.26.2/N-default-branch.json | 119 +- .../fixtures/1.26.2/O-pr-head-lifecycle.json | 8 +- .../fixtures/1.26.2/Q-protection-bypass.json | 33 +- .../fixtures/1.26.2/R-token-scope-edges.json | 14 +- .../fixtures/1.26.2/S-ref-pushes.json | 37 +- .../fixtures/1.26.2/T-merge-outcomes.json | 6 + .../fixtures/1.26.2/W-protected-contents.json | 697 +++++++ .../fixtures/1.26.2/X-auth-forms.json | 1604 +++++++++++++++++ .../conformance/fixtures/1.26.2/meta.json | 4 +- crates/forge/conformance/gitea-up.sh | 12 +- crates/forge/conformance/run.py | 330 +++- 41 files changed, 6624 insertions(+), 267 deletions(-) create mode 100644 crates/forge/conformance/departures.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/W-protected-contents.json create mode 100644 crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/W-protected-contents.json create mode 100644 crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md index 71bb31e0..c8bd25f7 100644 --- a/crates/forge/conformance/README.md +++ b/crates/forge/conformance/README.md @@ -33,7 +33,7 @@ A full record run needs a **fresh** server: scenarios create `alice`, `bot`, `ca ```sh python3 -I run.py check --base-url http://127.0.0.1:3000 --admin-token "$TOKEN" --fixtures fixtures/1.26.2/ -python3 -I run.py check ... --only F,G -v # a subset, verbose +python3 -I run.py check ... --only F,G -v # a subset, verbose (see the note below) python3 -I run.py diff fixtures/1.22.6 fixtures/1.26.2 # offline version diff python3 -I run.py show fixtures/1.26.2 --only G --body # what was recorded ``` @@ -42,6 +42,11 @@ python3 -I run.py show fixtures/1.26.2 --only G --body # what was recorded admin token has all scopes, the ability to create users through `POST /admin/users` and tokens through `POST /users/{u}/tokens` with Basic auth, and git smart HTTP on the same base URL. +`--only` skips the other scenarios, but a few facts are set by earlier ones (for example scenario B makes +`alice` a private user, which shows in the owner object of her repos), and `search` or listing calls see +every repo created so far. Compare a subset only against fixtures recorded the same way; the reference +run is the full ordered one. + ### What is compared Each scenario is a fixed sequence of exchanges (HTTP calls, `git` commands, and recorded @@ -54,12 +59,42 @@ observations called notes). Exchange N of the run is compared with exchange N of have the same length, and every scalar is compared by **value** after normalization. Only volatile values are compared by type: `message` and `errors` (text), every `url`/`*_url` key (they carry the host), a repo `size`, and paths a call lists in `volatile=[...]`. -- `message` text is checked with `must_contain=[...]`: each word must appear, case-insensitively, - in the response message. +- Error text: for every recorded exchange with status >= 400 whose body has `message` (or a non-empty + `errors`), the actual text must equal the recorded text after normalization (lower case, placeholders + removed, a trailing bracketed detail such as `[uid: 0, name: ]` removed). A failing exchange prints both + texts. `must_contain=[...]` is an additional check: each word must appear in the response message. - Text bodies (diffs, patches) are compared exactly unless the call marks `volatile=["$text"]`. -- git commands: exit status (ok or not) and `must_contain` words in the combined output. -- Notes: recorded observations such as `merged_within_10s`. A note marked `strict=False` (timing) - only warns. +- git commands: exit status (ok or not) and, for a failing step, the refusal text: the recorded + `remote:`/`fatal:`/`error:`/`!` lines (normalized, without hosts and ids) must all appear in the actual + output, so a push refused for another reason fails. `must_contain` words are checked too. +- Notes: recorded observations such as `merged_within_10s`. A note marked `strict=False` (timing, or a + race kept for the record) is stored but never compared. +- Repo fields Gitea updates asynchronously after a push (`empty`, `default_branch`) are read with + `settle_keys`: the call polls until three consecutive reads agree (up to 15 s) and records that value; + the first read is kept as a non-strict note. + +### Departures + +`departures.json` lists reviewed, intentional differences between sc-forge and the recorded Gitea +behaviour. Pass it with `check --departures departures.json`. Each entry is +`{scenario, exchange, label, expect, reason}`: + +- `exchange` is a fixture index, a list of indexes, a range `"a-b"`, or a git step name or note key. + Indexes are the same in `fixtures/1.22.6` and `fixtures/1.26.2` (their sequences are identical). +- `label` (single index only) must be contained in the fixture exchange's label, so an entry that points + at a moved exchange is reported as stale instead of silently covering the wrong one. +- `expect` replaces the strict comparison for that exchange: `status` (number or list), `message_contains`, + `ok` (git), `value` (note), `ignore_body` (status only), `ignore_fields` (compare strictly except these + keys), or `skip`. +- A matching exchange prints `expected difference honoured`; one that does not match the `expect` is a + failure (`unexpected`). An entry whose exchange no longer exists or whose label no longer matches + fails the run (`stale departure`). Do not pass departures when checking real Gitea. + +Departures that need a decision in sc-forge and could not be tied to one exchange are listed below. + +- Conflict merge: the departure covers the exchanges after the note `conflicting_pr_mergeable_after_8s` + in G and T. The merge of a PR whose head is already in base (`G#33`, `T#10`) also answers Gitea's + `405 Please try again later`; sc-forge may answer it differently and has no departure yet. ### Normalization @@ -109,6 +144,8 @@ order does not matter. Nothing else is sorted: array order is part of the contra | T | merge outcome table: unrelated history, identical tree, contained head, conflicts | | U | status-check edge cases: other commit, warning/skipped/error, moved head | | V | raw smart HTTP bytes and headers, gzip request body | +| W | contents API and direct pushes on a protected branch with `enable_push:true`, with and without a required status check | +| X | token, Bearer and Basic auth forms on API routes; site admin password; read-only token as Basic password | ## Add a scenario diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json new file mode 100644 index 00000000..3197a1bb --- /dev/null +++ b/crates/forge/conformance/departures.json @@ -0,0 +1,331 @@ +[ + { + "scenario": "G", + "exchange": 39, + "expect": { + "status": 409, + "message_contains": [ + "conflict" + ] + }, + "reason": "sc-forge answers a conflicting merge with 409 and a conflict message instead of Gitea's 405 'Please try again later'", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge" + }, + { + "scenario": "T", + "exchange": 20, + "expect": { + "status": 409, + "message_contains": [ + "conflict" + ] + }, + "reason": "sc-forge answers a conflicting merge with 409 and a conflict message instead of Gitea's 405 'Please try again later'", + "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge" + }, + { + "scenario": "L", + "exchange": 2, + "expect": { + "ignore_fields": [ + "private" + ] + }, + "reason": "sc-forge keeps private:true when asked for private:false", + "label": "PATCH /api/v1/repos/acme/pub1" + }, + { + "scenario": "L", + "exchange": 5, + "expect": { + "ignore_fields": [ + "private" + ] + }, + "reason": "sc-forge keeps private:true when asked for private:false", + "label": "PATCH /api/v1/repos/acme/pub1" + }, + { + "scenario": "L", + "exchange": 3, + "expect": { + "ignore_fields": [ + "private" + ] + }, + "reason": "GET after PATCH private:false: sc-forge still reports private:true", + "label": "GET /api/v1/repos/acme/pub1" + }, + { + "scenario": "R", + "exchange": 6, + "expect": { + "status": [ + 401, + 403 + ] + }, + "reason": "sc-forge refuses an access token used as the Basic password on /users/{u}/tokens", + "label": "POST /api/v1/users/alice/tokens" + }, + { + "scenario": "R", + "exchange": 7, + "expect": { + "status": [ + 401, + 403 + ] + }, + "reason": "sc-forge refuses an access token used as the Basic password on /users/{u}/tokens", + "label": "GET /api/v1/users/alice/tokens" + }, + { + "scenario": "S", + "exchange": 0, + "expect": { + "ok": false + }, + "reason": "sc-forge accepts only refs/heads and refs/tags from a push", + "label": "bot-push-replace-ref" + }, + { + "scenario": "S", + "exchange": 7, + "expect": { + "ok": false + }, + "reason": "sc-forge accepts only refs/heads and refs/tags from a push", + "label": "bot-push-notes-ref" + }, + { + "scenario": "S", + "exchange": 9, + "expect": { + "ok": false + }, + "reason": "sc-forge accepts only refs/heads and refs/tags from a push", + "label": "bot-push-changes-ref" + }, + { + "scenario": "S", + "exchange": 10, + "expect": { + "ok": false + }, + "reason": "sc-forge accepts only refs/heads and refs/tags from a push", + "label": "bot-push-keep-around-ref" + }, + { + "scenario": "S", + "exchange": 11, + "expect": { + "ok": false + }, + "reason": "sc-forge accepts only refs/heads and refs/tags from a push", + "label": "bot-push-arbitrary-ref" + }, + { + "scenario": "S", + "exchange": 15, + "expect": { + "status": 200, + "ignore_body": true + }, + "reason": "the ref list is shorter because the extra refs were refused", + "label": "GET /api/v1/repos/acme/refs/git/refs" + }, + { + "scenario": "H", + "exchange": 33, + "expect": { + "status": 422 + }, + "reason": "sc-forge rejects the unknown status state 'bogus'", + "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>" + }, + { + "scenario": "H", + "exchange": 34, + "expect": { + "status": 422 + }, + "reason": "sc-forge rejects the unknown status state ''", + "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>" + }, + { + "scenario": "H", + "exchange": 43, + "expect": { + "status": 422 + }, + "reason": "sc-forge rejects the unknown status state 'bogus'", + "label": "POST /api/v1/repos/acme/status/statuses/<sha#7>" + }, + { + "scenario": "H", + "exchange": 35, + "expect": { + "status": 200, + "ignore_body": true + }, + "reason": "total_count counts the two states sc-forge refuses", + "label": "GET /api/v1/repos/acme/status/commits/<sha#4>/status?limit=50" + }, + { + "scenario": "H", + "exchange": "44-47", + "expect": { + "skip": true + }, + "reason": "commit whose only status was refused has no statuses in sc-forge" + }, + { + "scenario": "M", + "exchange": 42, + "expect": { + "status": 422 + }, + "reason": "sc-forge does not rename repos", + "label": "PATCH /api/v1/repos/acme/rename-me" + }, + { + "scenario": "M", + "exchange": "43-51", + "expect": { + "skip": true + }, + "reason": "everything after the rename depends on it having happened" + }, + { + "scenario": "N", + "exchange": 0, + "expect": { + "status": 422 + }, + "reason": "sc-forge rejects a default branch that does not exist", + "label": "PATCH /api/v1/repos/acme/dflt" + }, + { + "scenario": "G", + "exchange": 43, + "expect": { + "status": 422 + }, + "reason": "sc-forge supports only Do=merge, not squash", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge" + }, + { + "scenario": "G", + "exchange": "44-48", + "expect": { + "skip": true + }, + "reason": "reads that follow a squash merge assume it happened" + }, + { + "scenario": "G", + "exchange": 49, + "expect": { + "status": 422 + }, + "reason": "sc-forge supports only Do=merge, not rebase", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge" + }, + { + "scenario": "G", + "exchange": "50-54", + "expect": { + "skip": true + }, + "reason": "reads that follow a rebase merge assume it happened" + }, + { + "scenario": "G", + "exchange": 55, + "expect": { + "status": 422 + }, + "reason": "sc-forge supports only Do=merge, not rebase-merge", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge" + }, + { + "scenario": "G", + "exchange": "56-59", + "expect": { + "skip": true + }, + "reason": "reads that follow a rebase-merge merge assume it happened" + }, + { + "scenario": "G", + "exchange": 60, + "expect": { + "status": 422 + }, + "reason": "sc-forge supports only Do=merge, not fast-forward-only", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge" + }, + { + "scenario": "G", + "exchange": "61-65", + "expect": { + "skip": true + }, + "reason": "reads that follow a fast-forward-only merge assume it happened" + }, + { + "scenario": "G", + "exchange": 66, + "expect": { + "status": 422 + }, + "reason": "sc-forge supports only Do=merge, not fast-forward-only", + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge" + }, + { + "scenario": "O", + "exchange": 14, + "expect": { + "skip": true + }, + "reason": "sc-forge freezes head.sha at merge; Gitea follows a recreated branch", + "label": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>" + }, + { + "scenario": "O", + "exchange": 15, + "expect": { + "value": true + }, + "reason": "sc-forge freezes head.sha at merge", + "label": "merged_pr_head_sha_frozen" + }, + { + "scenario": "O", + "exchange": 16, + "expect": { + "value": false + }, + "reason": "sc-forge does not follow a recreated branch after merge", + "label": "merged_pr_head_sha_follows_new_branch" + }, + { + "scenario": "K", + "exchange": 29, + "expect": { + "status": 404 + }, + "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled', for a missing repo", + "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack" + }, + { + "scenario": "K", + "exchange": 39, + "expect": { + "status": 404 + }, + "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled', for a missing repo", + "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack" + } +] \ No newline at end of file diff --git a/crates/forge/conformance/fixtures/1.22.6/C-repos.json b/crates/forge/conformance/fixtures/1.22.6/C-repos.json index bffa6d65..55943019 100644 --- a/crates/forge/conformance/fixtures/1.22.6/C-repos.json +++ b/crates/forge/conformance/fixtures/1.22.6/C-repos.json @@ -1961,28 +1961,45 @@ "name": "push-readonly-scope", "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", "ok": false, - "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403" + "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403", + "refusal": [ + "remote: forbidden", + "fatal: unable to access '/acme/alpha.git/': the requested url returned error: 403" + ] }, { "kind": "git", "name": "push-read-collab", "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", "ok": false, - "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'" + "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'", + "refusal": [ + "remote: gitea: user permission denied for writing.", + "! [remote rejected] head -> carol-branch (pre-receive hook declined)", + "error: failed to push some refs to '/acme/alpha.git'" + ] }, { "kind": "git", "name": "push-no-grant", "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/alpha.git/' not found" + ] }, { "kind": "git", "name": "clone-no-grant", "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", "ok": false, - "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/alpha.git/' not found" + ] }, { "kind": "git", diff --git a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json index 69bd013a..fb6c4d5a 100644 --- a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json @@ -48,7 +48,7 @@ "template": false, "parent": null, "mirror": false, - "size": 24, + "size": 25, "language": "Rust", "languages_url": "<base>/api/v1/repos/acme/hist/languages", "html_url": "<base>/acme/hist", @@ -105,6 +105,15 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "hist_first_read", + "value": { + "empty": false, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", diff --git a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json index 1e9552f7..186f92c1 100644 --- a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json @@ -964,7 +964,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1498,7 +1498,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1777,7 +1777,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2073,7 +2073,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2606,7 +2606,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, diff --git a/crates/forge/conformance/fixtures/1.22.6/G-merge.json b/crates/forge/conformance/fixtures/1.22.6/G-merge.json index f32668fc..5d7f7741 100644 --- a/crates/forge/conformance/fixtures/1.22.6/G-merge.json +++ b/crates/forge/conformance/fixtures/1.22.6/G-merge.json @@ -74,7 +74,7 @@ "html_url": "<base>/acme/merges/pulls/1", "diff_url": "<base>/acme/merges/pulls/1.diff", "patch_url": "<base>/acme/merges/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -121,7 +121,7 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -219,7 +219,7 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -373,7 +373,7 @@ "html_url": "<base>/acme/merges/pulls/1", "diff_url": "<base>/acme/merges/pulls/1.diff", "patch_url": "<base>/acme/merges/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#3>", @@ -743,7 +743,7 @@ "html_url": "<base>/acme/merges/pulls/2", "diff_url": "<base>/acme/merges/pulls/2.diff", "patch_url": "<base>/acme/merges/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#4>", @@ -1147,7 +1147,7 @@ "template": false, "parent": null, "mirror": false, - "size": 29, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -1245,7 +1245,7 @@ "template": false, "parent": null, "mirror": false, - "size": 29, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3468,7 +3468,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3539,7 +3539,7 @@ "template": false, "parent": null, "mirror": false, - "size": 41, + "size": 39, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3637,7 +3637,7 @@ "template": false, "parent": null, "mirror": false, - "size": 41, + "size": 39, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3830,7 +3830,7 @@ "html_url": "<base>/acme/merges/pulls/14", "diff_url": "<base>/acme/merges/pulls/14.diff", "patch_url": "<base>/acme/merges/pulls/14.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#19>", @@ -3901,7 +3901,7 @@ "template": false, "parent": null, "mirror": false, - "size": 42, + "size": 45, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3999,7 +3999,7 @@ "template": false, "parent": null, "mirror": false, - "size": 42, + "size": 45, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", diff --git a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json index 949a328f..efaa743f 100644 --- a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json @@ -190,7 +190,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/status/languages", "html_url": "<base>/acme/status", @@ -473,9 +473,9 @@ "body": [ { "id": "<id:id#1>", - "status": "pending", + "status": "success", "target_url": "http://example.invalid/run/1", - "description": "ci/test is pending", + "description": "ci/test is success", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -508,9 +508,9 @@ }, { "id": "<id:id#2>", - "status": "success", + "status": "pending", "target_url": "http://example.invalid/run/1", - "description": "ci/test is success", + "description": "ci/test is pending", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -556,9 +556,9 @@ "body": [ { "id": "<id:id#1>", - "status": "pending", + "status": "success", "target_url": "http://example.invalid/run/1", - "description": "ci/test is pending", + "description": "ci/test is success", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -591,9 +591,9 @@ }, { "id": "<id:id#2>", - "status": "success", + "status": "pending", "target_url": "http://example.invalid/run/1", - "description": "ci/test is success", + "description": "ci/test is pending", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -3022,6 +3022,264 @@ "url": "<base>/api/swagger" } }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#7>", + "auth": "admin", + "status": 201, + "request": { + "state": "bogus", + "context": "ci/bogus-only", + "description": "ci/bogus-only is bogus", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#7>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "bogus", + "sha": "<sha#7>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, + "commit_url": "", + "url": "" + } + }, + { + "kind": "note", + "key": "combined_state_only_bogus", + "value": "bogus", + "strict": true + }, + { + "kind": "note", + "key": "combined_total_only_bogus", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#7>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, { "kind": "http", "method": "GET", @@ -3048,14 +3306,142 @@ "auth": "admin", "status": 200, "headers": { - "content-type": "application/json;charset=utf-8" + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" }, "body": { - "state": "", - "sha": "", - "total_count": 0, - "statuses": null, - "repository": null, + "state": "bogus", + "sha": "<sha#7>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + }, "commit_url": "", "url": "" } @@ -3068,9 +3454,45 @@ "status": 200, "headers": { "content-type": "application/json;charset=utf-8", - "x-total-count": "0" + "x-total-count": "1" }, - "body": [] + "body": [ + { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] } ] } diff --git a/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json index cfe935fa..561bbe5d 100644 --- a/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json @@ -211,6 +211,11 @@ "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", "must_contain": [ "protected" + ], + "refusal": [ + "remote: gitea: not allowed to push to protected branch main", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" ] }, { @@ -218,7 +223,12 @@ "name": "push-protected-admin", "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "refusal": [ + "remote: gitea: not allowed to push to protected branch main", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" + ] }, { "kind": "git", @@ -232,7 +242,12 @@ "name": "delete-protected-by-push", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "refusal": [ + "remote: gitea: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json index dcf58f46..8f39cc71 100644 --- a/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json @@ -134,42 +134,63 @@ "name": "clone-bad-token", "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", "ok": false, - "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: verify", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "push-bad-token", "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", "ok": false, - "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: verify", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "fetch-bad-token", "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", "ok": false, - "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: verify", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "clone-no-credentials", "cmd": "git clone -q <base>/acme/smart.git <tmp>/j-no-credentials", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", "name": "push-no-credentials", "cmd": "git push <base>/acme/smart.git <sha#1>:refs/heads/j-no-credentials", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", "name": "fetch-no-credentials", "cmd": "git fetch -q <base>/acme/smart.git main", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", @@ -442,7 +463,11 @@ "name": "flw-absent-expected-but-exists", "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "! [rejected] -> b (stale info)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", @@ -456,14 +481,22 @@ "name": "flw-stale-lease", "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "! [rejected] -> b (stale info)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", "name": "push-nonff-without-force", "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] -> b (non-fast-forward)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", @@ -600,7 +633,12 @@ "name": "delete-default-branch-by-push", "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "remote: gitea: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json index 5fb72197..11872b73 100644 --- a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json @@ -732,7 +732,10 @@ "name": "ls-remote-vis-none", "cmd": "git ls-remote <base>/acme/vis.git", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "http", @@ -754,7 +757,10 @@ "name": "ls-remote-ghost-none", "cmd": "git ls-remote <base>/acme/ghost.git", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "http", @@ -776,7 +782,11 @@ "name": "ls-remote-vis-dave", "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/vis.git/' not found" + ] }, { "kind": "http", @@ -798,7 +808,11 @@ "name": "ls-remote-ghost-dave", "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/ghost.git/' not found" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json index 66818ea6..e574e51d 100644 --- a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json @@ -690,6 +690,15 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh1_before_push_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -729,14 +738,14 @@ "name": "fresh1", "full_name": "acme/fresh1", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "parent": null, "mirror": false, "size": 22, - "language": "", + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", @@ -751,7 +760,7 @@ "open_issues_count": 0, "open_pr_counter": 0, "release_counter": 0, - "default_branch": "main", + "default_branch": "trunk", "archived": false, "created_at": "<ts>", "updated_at": "<ts>", @@ -792,12 +801,21 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh1_after_trunk_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-trunk-first", "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", "ok": true, - "output": "" + "output": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD" }, { "kind": "http", @@ -807,9 +825,46 @@ "status": 200, "headers": { "content-type": "application/json;charset=utf-8", - "x-total-count": "0" + "x-total-count": "1" }, - "body": null + "body": [ + { + "name": "trunk", + "commit": { + "id": "<sha#5>", + "message": "commit on trunk\n", + "url": "<base>/acme/fresh1/commit/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] }, { "kind": "http", @@ -850,14 +905,14 @@ "name": "fresh2", "full_name": "acme/fresh2", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "parent": null, "mirror": false, - "size": 22, - "language": "", + "size": 23, + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh2/languages", "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", @@ -913,6 +968,15 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh2_after_main_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -1015,6 +1079,15 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh3_before_push_first_read", + "value": { + "empty": true, + "default_branch": "develop" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -1054,14 +1127,14 @@ "name": "fresh3", "full_name": "acme/fresh3", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "parent": null, "mirror": false, "size": 22, - "language": "", + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", @@ -1076,7 +1149,7 @@ "open_issues_count": 0, "open_pr_counter": 0, "release_counter": 0, - "default_branch": "develop", + "default_branch": "main", "archived": false, "created_at": "<ts>", "updated_at": "<ts>", @@ -1117,6 +1190,15 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh3_after_main_first_read", + "value": { + "empty": true, + "default_branch": "develop" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-main-pushed-first", @@ -1170,7 +1252,7 @@ "parent": null, "mirror": false, "size": 23, - "language": "", + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", @@ -1226,12 +1308,21 @@ "repo_transfer": null } }, + { + "kind": "note", + "key": "fresh3_after_develop_first_read", + "value": { + "empty": false, + "default_branch": "main" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-develop-pushed-second", "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", "ok": true, - "output": "ref: refs/heads/develop\tHEAD\n<sha#5>\tHEAD" + "output": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD" } ] } diff --git a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json index cfcbd81c..97664d72 100644 --- a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json @@ -331,7 +331,7 @@ "html_url": "<base>/acme/life/pulls/1", "diff_url": "<base>/acme/life/pulls/1.diff", "patch_url": "<base>/acme/life/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -378,7 +378,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", @@ -476,7 +476,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", @@ -599,7 +599,7 @@ "html_url": "<base>/acme/life/pulls/1", "diff_url": "<base>/acme/life/pulls/1.diff", "patch_url": "<base>/acme/life/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -646,7 +646,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", @@ -744,7 +744,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", @@ -882,7 +882,7 @@ "html_url": "<base>/acme/life/pulls/2", "diff_url": "<base>/acme/life/pulls/2.diff", "patch_url": "<base>/acme/life/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1150,7 +1150,7 @@ "html_url": "<base>/acme/life/pulls/1", "diff_url": "<base>/acme/life/pulls/1.diff", "patch_url": "<base>/acme/life/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1435,7 +1435,7 @@ "html_url": "<base>/acme/life/pulls/2", "diff_url": "<base>/acme/life/pulls/2.diff", "patch_url": "<base>/acme/life/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3119,7 +3119,11 @@ "updated_at": "<ts>", "closed_at": null, "pin_order": 0 - } + }, + "volatile": [ + "state", + "closed_at" + ] }, { "kind": "note", diff --git a/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json b/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json index dbd7a7dc..70a583ee 100644 --- a/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json +++ b/crates/forge/conformance/fixtures/1.22.6/Q-protection-bypass.json @@ -209,7 +209,11 @@ "name": "nonff-protected-push-disabled", "cmd": "git push origin HEAD:refs/heads/main", "ok": false, - "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] head -> main (non-fast-forward)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", @@ -257,21 +261,35 @@ "name": "nonff-protected-push-enabled", "cmd": "git push origin HEAD:refs/heads/main", "ok": false, - "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] head -> main (non-fast-forward)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "git", "name": "force-protected-push-enabled", "cmd": "git push -f origin HEAD:refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: branch main is protected from force push \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: Gitea: branch main is protected from force push \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: gitea: branch main is protected from force push", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "git", "name": "delete-protected-push-enabled", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: gitea: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", @@ -319,7 +337,12 @@ "name": "delete-protected-push-disabled", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: gitea: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json index fc8ed127..26c360ad 100644 --- a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json @@ -170,20 +170,20 @@ }, { "id": "<id:id#3>", - "name": "ci", + "name": "all", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "read:repository" + "all" ] }, { "id": "<id:id#4>", - "name": "all", + "name": "ci", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "all" + "read:repository" ] } ], diff --git a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json index 7fa1f35e..71761a95 100644 --- a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json @@ -15,21 +15,35 @@ "name": "bot-push-pull-1-head", "cmd": "git push origin <sha#1>:refs/pull/1/head", "ok": false, - "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] -> refs/pull/1/head (non-fast-forward)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", "name": "bot-push-pull-1-head-forced", "cmd": "git push origin +<sha#1>:refs/pull/1/head", "ok": false, - "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: error: hook declined to update refs/pull/1/head", + "! [remote rejected] -> refs/pull/1/head (hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", "name": "bot-push-pull-999-head", "cmd": "git push origin <sha#1>:refs/pull/999/head", "ok": false, - "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: error: hook declined to update refs/pull/999/head", + "! [remote rejected] -> refs/pull/999/head (hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -64,7 +78,11 @@ "name": "bot-push-for-ref", "cmd": "git push origin <sha#1>:refs/for/main", "ok": false, - "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "! [remote rejected] -> refs/for/main (topic-branch is not set)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -99,7 +117,12 @@ "name": "read-collab-push-tag", "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", "ok": false, - "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: gitea: user permission denied for writing.", + "! [remote rejected] -> v-carol (pre-receive hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -338,7 +361,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", @@ -436,7 +459,7 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", diff --git a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json index 1cdb295b..a803e540 100644 --- a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json @@ -570,6 +570,12 @@ "$text" ] }, + { + "kind": "note", + "key": "unrelated_merge_exact_body", + "value": "{\"Style\":\"merge\",\"StdOut\":\"\",\"StdErr\":\"fatal: refusing to merge unrelated histories\\n\",\"Err\":{\"Stderr\":null}}\n", + "strict": false + }, { "kind": "http", "method": "GET", @@ -2859,7 +2865,7 @@ "html_url": "<base>/acme/outcomes/pulls/4", "diff_url": "<base>/acme/outcomes/pulls/4.diff", "patch_url": "<base>/acme/outcomes/pulls/4.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#7>", @@ -2930,7 +2936,7 @@ "template": false, "parent": null, "mirror": false, - "size": 29, + "size": 28, "language": "", "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", "html_url": "<base>/acme/outcomes", @@ -3028,7 +3034,7 @@ "template": false, "parent": null, "mirror": false, - "size": 29, + "size": 28, "language": "", "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", "html_url": "<base>/acme/outcomes", diff --git a/crates/forge/conformance/fixtures/1.22.6/W-protected-contents.json b/crates/forge/conformance/fixtures/1.22.6/W-protected-contents.json new file mode 100644 index 00000000..0421928e --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/W-protected-contents.json @@ -0,0 +1,662 @@ +{ + "scenario": "W", + "title": "protected-contents", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w1-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create on main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w1-bot.txt", + "path": "w1-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#1>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w1-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w1-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w1-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w1-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w1-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#1>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "message": "create on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w1-admin.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "eAo=", + "message": "create on main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w1-admin.txt", + "path": "w1-admin.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#5>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w1-admin.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w1-admin.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w1-admin.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w1-admin.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w1-admin.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#5>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "message": "create on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#6>", + "sha": "<sha#6>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/pcont/contents/README.md", + "auth": "bot", + "status": 200, + "request": { + "content": "cHVzaGFibGUK", + "message": "update on main", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#10>", + "last_commit_sha": "<sha#8>", + "type": "file", + "size": 9, + "encoding": "base64", + "content": "cHVzaGFibGUK", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#10>", + "download_url": "<base>/acme/pcont/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#10>", + "html": "<base>/acme/pcont/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#8>", + "sha": "<sha#8>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#8>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "message": "update on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#9>", + "sha": "<sha#9>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pcont/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w2-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check unmet", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w2-bot.txt", + "path": "w2-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#11>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w2-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w2-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w2-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w2-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w2-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#11>", + "sha": "<sha#11>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#11>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#8>", + "sha": "<sha#8>", + "created": "<ts>" + } + ], + "message": "create, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#12>", + "sha": "<sha#12>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w2-admin.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check unmet", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w2-admin.txt", + "path": "w2-admin.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#13>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w2-admin.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w2-admin.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w2-admin.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w2-admin.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w2-admin.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#13>", + "sha": "<sha#13>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#13>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#11>", + "sha": "<sha#11>", + "created": "<ts>" + } + ], + "message": "create, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#14>", + "sha": "<sha#14>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/pcont/contents/README.md", + "auth": "bot", + "status": 200, + "request": { + "content": "YWdhaW4K", + "message": "update, check unmet", + "sha": "<sha#10>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#17>", + "last_commit_sha": "<sha#15>", + "type": "file", + "size": 6, + "encoding": "base64", + "content": "YWdhaW4K", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#17>", + "download_url": "<base>/acme/pcont/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#17>", + "html": "<base>/acme/pcont/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#15>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#13>", + "sha": "<sha#13>", + "created": "<ts>" + } + ], + "message": "update, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#16>", + "sha": "<sha#16>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "git", + "name": "ff-push-enable-push-status-unmet", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/pcont.git\n <short>..<short> HEAD -> main" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w3-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check met", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w3-bot.txt", + "path": "w3-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#18>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w3-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w3-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w3-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w3-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w3-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#18>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#19>", + "sha": "<sha#19>", + "created": "<ts>" + } + ], + "message": "create, check met\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#20>", + "sha": "<sha#20>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pcont/branch_protections/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "created_at": "<ts>", + "updated_at": "<ts>" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json new file mode 100644 index 00000000..3912d900 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json @@ -0,0 +1,1568 @@ +{ + "scenario": "X", + "title": "auth-forms", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot", + "status": 201, + "request": { + "state": "success", + "context": "auth-0" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-0", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-bearer", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-bearer", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-bearer", + "status": 201, + "request": { + "state": "success", + "context": "auth-1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-1", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-token-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-token-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-token-password", + "status": 201, + "request": { + "state": "success", + "context": "auth-2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-2", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-token-user", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-token-user", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-token-user", + "status": 201, + "request": { + "state": "success", + "context": "auth-3" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-3", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-oauth2", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-oauth2", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-oauth2", + "status": 201, + "request": { + "state": "success", + "context": "auth-4" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-4", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-other-name", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-other-name", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-other-name", + "status": 201, + "request": { + "state": "success", + "context": "auth-5" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-5", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "parent": null, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": false, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "repo_transfer": null + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-password", + "status": 201, + "request": { + "state": "success", + "context": "auth-6" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-6", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad-bearer", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bad-bearer", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bad-bearer", + "status": 401, + "request": { + "state": "success", + "context": "auth-7" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: ]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad-basic-token-user", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: <token>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bad-basic-token-user", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: <token>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bad-basic-token-user", + "status": 401, + "request": { + "state": "success", + "context": "auth-8" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "user does not exist [uid: 0, name: <token>]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "siteowner-pw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "siteowner", + "login_name": "siteowner", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "siteowner@example.invalid", + "avatar_url": "<base>/avatars/870bfdc3421389d1a95662814583521b", + "html_url": "<base>/siteowner", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "siteowner" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "siteowner-pw", + "status": 201, + "request": { + "name": "by-site-admin-password", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "by-site-admin-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/bot/tokens", + "auth": "siteowner-pw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "by-site-admin-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ] + }, + { + "id": "<id:id#2>", + "name": "scoped", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:organization", + "write:repository", + "read:user" + ] + }, + { + "id": "<id:id#3>", + "name": "all", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "all" + ] + } + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "admin", + "status": 401, + "request": { + "name": "by-admin-token", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "auth required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro-as-password", + "status": 403, + "request": { + "name": "minted-by-readonly-token", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [write:user]", + "url": "<base>/api/swagger" + } + }, + { + "kind": "note", + "key": "readonly_token_as_password_status", + "value": 403, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro-as-password", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s): [read:user]", + "url": "<base>/api/swagger" + }, + "volatile": [ + "id", + "name", + "scopes" + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.22.6/meta.json b/crates/forge/conformance/fixtures/1.22.6/meta.json index bb5b7898..78df8cf9 100644 --- a/crates/forge/conformance/fixtures/1.22.6/meta.json +++ b/crates/forge/conformance/fixtures/1.22.6/meta.json @@ -24,6 +24,8 @@ "S-ref-pushes.json", "T-merge-outcomes.json", "U-status-check-edges.json", - "V-smart-http-bytes.json" + "V-smart-http-bytes.json", + "W-protected-contents.json", + "X-auth-forms.json" ] } diff --git a/crates/forge/conformance/fixtures/1.26.2/A-meta.json b/crates/forge/conformance/fixtures/1.26.2/A-meta.json index 45a472ff..1658eb0f 100644 --- a/crates/forge/conformance/fixtures/1.26.2/A-meta.json +++ b/crates/forge/conformance/fixtures/1.26.2/A-meta.json @@ -156,9 +156,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json index 839b9b46..4e6bfc9f 100644 --- a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json @@ -811,9 +811,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "HasOrgOrUserVisible", "url": "<base>/api/swagger", - "errors": null, - "message": "HasOrgOrUserVisible" + "errors": null } }, { @@ -858,9 +858,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/C-repos.json b/crates/forge/conformance/fixtures/1.26.2/C-repos.json index 04f603d9..073e593c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/C-repos.json +++ b/crates/forge/conformance/fixtures/1.26.2/C-repos.json @@ -1989,9 +1989,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "url": "<base>/api/swagger", "errors": null, - "message": "not found" + "message": "not found", + "url": "<base>/api/swagger" } }, { @@ -2025,28 +2025,45 @@ "name": "push-readonly-scope", "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", "ok": false, - "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403" + "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403", + "refusal": [ + "remote: forbidden", + "fatal: unable to access '/acme/alpha.git/': the requested url returned error: 403" + ] }, { "kind": "git", "name": "push-read-collab", "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", "ok": false, - "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'" + "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'", + "refusal": [ + "remote: error: user permission denied for writing.", + "! [remote rejected] head -> carol-branch (pre-receive hook declined)", + "error: failed to push some refs to '/acme/alpha.git'" + ] }, { "kind": "git", "name": "push-no-grant", "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/alpha.git/' not found" + ] }, { "kind": "git", "name": "clone-no-grant", "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", "ok": false, - "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found" + "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/alpha.git/' not found" + ] }, { "kind": "git", @@ -2185,9 +2202,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json index bfc4e031..ca692616 100644 --- a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json @@ -174,9 +174,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -293,9 +293,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json index 488aab05..4d432cf2 100644 --- a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json @@ -47,7 +47,7 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 25, "language": "Rust", "languages_url": "<base>/api/v1/repos/acme/hist/languages", "html_url": "<base>/acme/hist", @@ -109,6 +109,15 @@ "licenses": [] } }, + { + "kind": "note", + "key": "hist_first_read", + "value": { + "empty": false, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -346,9 +355,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/G-merge.json b/crates/forge/conformance/fixtures/1.26.2/G-merge.json index f16833ce..541944cd 100644 --- a/crates/forge/conformance/fixtures/1.26.2/G-merge.json +++ b/crates/forge/conformance/fixtures/1.26.2/G-merge.json @@ -454,7 +454,7 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -556,7 +556,7 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -2393,7 +2393,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -2495,7 +2495,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -2689,7 +2689,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -2791,7 +2791,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -2983,7 +2983,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3085,7 +3085,7 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3579,7 +3579,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3649,7 +3649,7 @@ "fork": false, "template": false, "mirror": false, - "size": 35, + "size": 37, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", @@ -3751,7 +3751,7 @@ "fork": false, "template": false, "mirror": false, - "size": 35, + "size": 37, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", diff --git a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json index a08cea36..20e0de3c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json @@ -493,7 +493,7 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/status/languages", "html_url": "<base>/acme/status", @@ -577,9 +577,9 @@ "body": [ { "id": "<id:id#1>", - "status": "pending", + "status": "success", "target_url": "http://example.invalid/run/1", - "description": "ci/test is pending", + "description": "ci/test is success", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -612,9 +612,9 @@ }, { "id": "<id:id#2>", - "status": "success", + "status": "pending", "target_url": "http://example.invalid/run/1", - "description": "ci/test is success", + "description": "ci/test is pending", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -660,9 +660,9 @@ "body": [ { "id": "<id:id#1>", - "status": "pending", + "status": "success", "target_url": "http://example.invalid/run/1", - "description": "ci/test is pending", + "description": "ci/test is success", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -695,9 +695,9 @@ }, { "id": "<id:id#2>", - "status": "success", + "status": "pending", "target_url": "http://example.invalid/run/1", - "description": "ci/test is success", + "description": "ci/test is pending", "url": "<base>/api/v1/repos/acme/status/statuses/<sha#2>", "context": "ci/test", "creator": { @@ -3150,6 +3150,268 @@ "errors": null } }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/status/statuses/<sha#7>", + "auth": "admin", + "status": 201, + "request": { + "state": "bogus", + "context": "ci/bogus-only", + "description": "ci/bogus-only is bogus", + "target_url": "http://example.invalid/run/1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/commits/<sha#7>/status?limit=50", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": { + "state": "pending", + "sha": "<sha#7>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], + "repository": { + "id": "<id:repository.id#1>", + "owner": { + "id": "<id:repository.owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:repository.owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "status", + "full_name": "acme/status", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 25, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/status/languages", + "html_url": "<base>/acme/status", + "url": "<base>/api/v1/repos/acme/status", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "clone_url": "<base>/acme/status.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": true, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + }, + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#7>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#7>/status" + } + }, + { + "kind": "note", + "key": "combined_state_only_bogus", + "value": "pending", + "strict": true + }, + { + "kind": "note", + "key": "combined_total_only_bogus", + "value": 1, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/status/statuses/<sha#7>?limit=100", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "1" + }, + "body": [ + { + "id": "<id:id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ] + }, { "kind": "http", "method": "GET", @@ -3175,13 +3437,49 @@ "status": 200, "headers": { "content-type": "application/json;charset=utf-8", - "x-total-count": "0" + "x-total-count": "1" }, "body": { "state": "pending", - "sha": "<sha#6>", - "total_count": 0, - "statuses": null, + "sha": "<sha#7>", + "total_count": 1, + "statuses": [ + { + "id": "<id:statuses.id#1>", + "status": "bogus", + "target_url": "http://example.invalid/run/1", + "description": "ci/bogus-only is bogus", + "url": "<base>/api/v1/repos/acme/status/statuses/<sha#7>", + "context": "ci/bogus-only", + "creator": { + "id": "<id:statuses.creator.id#1>", + "login": "<admin>", + "login_name": "", + "source_id": "<id:statuses.creator.source_id#1>", + "full_name": "", + "email": "1+<admin>@noreply.localhost", + "avatar_url": "<base>/avatars/98afc2e6474fc6c67d129b8b3043e959", + "html_url": "<base>/<admin>", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "<admin>" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + ], "repository": { "id": "<id:repository.id#1>", "owner": { @@ -3278,8 +3576,8 @@ "topics": [], "licenses": [] }, - "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#6>", - "url": "<base>/api/v1/repos/acme/status/commits/<sha#6>/status" + "commit_url": "<base>/api/v1/repos/acme/status/commits/<sha#7>", + "url": "<base>/api/v1/repos/acme/status/commits/<sha#7>/status" } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json index 231549dd..b7b2aa2d 100644 --- a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json @@ -232,6 +232,11 @@ "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", "must_contain": [ "protected" + ], + "refusal": [ + "remote: error: not allowed to push to protected branch main", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" ] }, { @@ -239,7 +244,12 @@ "name": "push-protected-admin", "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "refusal": [ + "remote: error: not allowed to push to protected branch main", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" + ] }, { "kind": "git", @@ -253,7 +263,12 @@ "name": "delete-protected-by-push", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'" + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", + "refusal": [ + "remote: error: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/prot.git'" + ] }, { "kind": "http", @@ -375,9 +390,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -399,9 +414,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json index 31cf2a0a..a45aa6fd 100644 --- a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json @@ -134,42 +134,63 @@ "name": "clone-bad-token", "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", "ok": false, - "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: failed to authenticate user", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "push-bad-token", "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", "ok": false, - "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: failed to authenticate user", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "fetch-bad-token", "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", "ok": false, - "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'" + "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", + "refusal": [ + "remote: failed to authenticate user", + "fatal: authentication failed for '/acme/smart.git/'" + ] }, { "kind": "git", "name": "clone-no-credentials", "cmd": "git clone -q <base>/acme/smart.git <tmp>/j-no-credentials", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", "name": "push-no-credentials", "cmd": "git push <base>/acme/smart.git <sha#1>:refs/heads/j-no-credentials", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", "name": "fetch-no-credentials", "cmd": "git fetch -q <base>/acme/smart.git main", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "git", @@ -442,7 +463,11 @@ "name": "flw-absent-expected-but-exists", "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "! [rejected] -> b (stale info)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", @@ -456,14 +481,22 @@ "name": "flw-stale-lease", "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "! [rejected] -> b (stale info)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", "name": "push-nonff-without-force", "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, - "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] -> b (non-fast-forward)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "git", @@ -598,7 +631,12 @@ "name": "delete-default-branch-by-push", "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'" + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'", + "refusal": [ + "remote: error: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/smart.git'" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json index 54824cc3..68017e98 100644 --- a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json @@ -291,9 +291,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -306,9 +306,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -321,9 +321,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -364,9 +364,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -655,9 +655,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -738,7 +738,10 @@ "name": "ls-remote-vis-none", "cmd": "git ls-remote <base>/acme/vis.git", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "http", @@ -760,7 +763,10 @@ "name": "ls-remote-ghost-none", "cmd": "git ls-remote <base>/acme/ghost.git", "ok": false, - "output": "fatal: could not read Username for '<base>': terminal prompts disabled" + "output": "fatal: could not read Username for '<base>': terminal prompts disabled", + "refusal": [ + "fatal: could not read username for '': terminal prompts disabled" + ] }, { "kind": "http", @@ -781,7 +787,11 @@ "name": "ls-remote-vis-dave", "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/vis.git/' not found" + ] }, { "kind": "http", @@ -802,7 +812,11 @@ "name": "ls-remote-ghost-dave", "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", "ok": false, - "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found" + "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found", + "refusal": [ + "remote: repository not found", + "fatal: repository '/acme/ghost.git/' not found" + ] }, { "kind": "http", @@ -3013,9 +3027,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "HasOrgOrUserVisible", "url": "<base>/api/swagger", - "errors": null, - "message": "HasOrgOrUserVisible" + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json index 15a8b115..ba9553e7 100644 --- a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json @@ -1180,9 +1180,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json index 09d9c4ce..60e00817 100644 --- a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json @@ -714,6 +714,15 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh1_before_push_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -753,13 +762,13 @@ "name": "fresh1", "full_name": "acme/fresh1", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "mirror": false, "size": 22, - "language": "", + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh1/languages", "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", @@ -775,7 +784,7 @@ "open_issues_count": 0, "open_pr_counter": 0, "release_counter": 0, - "default_branch": "main", + "default_branch": "trunk", "archived": false, "created_at": "<ts>", "updated_at": "<ts>", @@ -820,12 +829,21 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh1_after_trunk_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-trunk-first", "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", "ok": true, - "output": "" + "output": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD" }, { "kind": "http", @@ -835,9 +853,46 @@ "status": 200, "headers": { "content-type": "application/json;charset=utf-8", - "x-total-count": "0" + "x-total-count": "1" }, - "body": null + "body": [ + { + "name": "trunk", + "commit": { + "id": "<sha#5>", + "message": "commit on trunk\n", + "url": "<base>/acme/fresh1/commit/<sha#5>", + "author": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "committer": { + "name": "Conf", + "email": "conf@example.invalid", + "username": "" + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + }, + "timestamp": "<ts>", + "added": null, + "removed": null, + "modified": null + }, + "protected": false, + "required_approvals": 0, + "enable_status_check": false, + "status_check_contexts": [], + "user_can_push": true, + "user_can_merge": true, + "effective_branch_protection_name": "" + } + ] }, { "kind": "http", @@ -878,13 +933,13 @@ "name": "fresh2", "full_name": "acme/fresh2", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "mirror": false, - "size": 22, - "language": "", + "size": 23, + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh2/languages", "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", @@ -945,6 +1000,15 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh2_after_main_first_read", + "value": { + "empty": true, + "default_branch": "main" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -1051,6 +1115,15 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh3_before_push_first_read", + "value": { + "empty": true, + "default_branch": "develop" + }, + "strict": false + }, { "kind": "http", "method": "GET", @@ -1090,13 +1163,13 @@ "name": "fresh3", "full_name": "acme/fresh3", "description": "", - "empty": true, + "empty": false, "private": true, "fork": false, "template": false, "mirror": false, "size": 22, - "language": "", + "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", @@ -1112,7 +1185,7 @@ "open_issues_count": 0, "open_pr_counter": 0, "release_counter": 0, - "default_branch": "develop", + "default_branch": "main", "archived": false, "created_at": "<ts>", "updated_at": "<ts>", @@ -1157,6 +1230,15 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh3_after_main_first_read", + "value": { + "empty": true, + "default_branch": "develop" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-main-pushed-first", @@ -1208,7 +1290,7 @@ "fork": false, "template": false, "mirror": false, - "size": 22, + "size": 23, "language": "Text", "languages_url": "<base>/api/v1/repos/acme/fresh3/languages", "html_url": "<base>/acme/fresh3", @@ -1270,12 +1352,21 @@ "licenses": [] } }, + { + "kind": "note", + "key": "fresh3_after_develop_first_read", + "value": { + "empty": false, + "default_branch": "main" + }, + "strict": false + }, { "kind": "git", "name": "ls-remote-symref-develop-pushed-second", "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", "ok": true, - "output": "ref: refs/heads/develop\tHEAD\n<sha#5>\tHEAD" + "output": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD" } ] } diff --git a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json index 06291668..1d8a1dec 100644 --- a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json @@ -1185,7 +1185,7 @@ "html_url": "<base>/acme/life/pulls/1", "diff_url": "<base>/acme/life/pulls/1.diff", "patch_url": "<base>/acme/life/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3223,7 +3223,11 @@ "closed_at": null, "pin_order": 0, "content_version": 0 - } + }, + "volatile": [ + "state", + "closed_at" + ] }, { "kind": "note", diff --git a/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json b/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json index 618d85bd..a4d9a585 100644 --- a/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json +++ b/crates/forge/conformance/fixtures/1.26.2/Q-protection-bypass.json @@ -218,7 +218,11 @@ "name": "nonff-protected-push-disabled", "cmd": "git push origin HEAD:refs/heads/main", "ok": false, - "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] head -> main (non-fast-forward)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", @@ -273,21 +277,35 @@ "name": "nonff-protected-push-enabled", "cmd": "git push origin HEAD:refs/heads/main", "ok": false, - "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/bypass.git\n ! [rejected] HEAD -> main (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/bypass.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] head -> main (non-fast-forward)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "git", "name": "force-protected-push-enabled", "cmd": "git push -f origin HEAD:refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: branch main is protected from force push \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: error: \nremote: error: branch main is protected from force push \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: error: branch main is protected from force push", + "! [remote rejected] head -> main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "git", "name": "delete-protected-push-enabled", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: error: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", @@ -342,7 +360,12 @@ "name": "delete-protected-push-disabled", "cmd": "git push origin :refs/heads/main", "ok": false, - "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'" + "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/bypass.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/bypass.git'", + "refusal": [ + "remote: error: branch main is the default branch and cannot be deleted", + "! [remote rejected] main (pre-receive hook declined)", + "error: failed to push some refs to '/acme/bypass.git'" + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json index 990b88a0..2f5992fc 100644 --- a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json @@ -156,10 +156,11 @@ "body": [ { "id": "<id:id#1>", - "name": "via-token-as-password", + "name": "po", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ + "public-only", "read:repository" ], "created_at": "<ts>", @@ -167,11 +168,10 @@ }, { "id": "<id:id#2>", - "name": "po", + "name": "via-token-as-password", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "public-only", "read:repository" ], "created_at": "<ts>", @@ -179,22 +179,22 @@ }, { "id": "<id:id#3>", - "name": "ci", + "name": "all", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "read:repository" + "all" ], "created_at": "<ts>", "last_used_at": "<ts>" }, { "id": "<id:id#4>", - "name": "all", + "name": "ci", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "all" + "read:repository" ], "created_at": "<ts>", "last_used_at": "<ts>" diff --git a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json index 1d2c98ae..a8aa1205 100644 --- a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json @@ -15,21 +15,35 @@ "name": "bot-push-pull-1-head", "cmd": "git push origin <sha#1>:refs/pull/1/head", "ok": false, - "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details." + "output": "To <base>/acme/refs.git\n ! [rejected] <sha#1> -> refs/pull/1/head (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/refs.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", + "refusal": [ + "! [rejected] -> refs/pull/1/head (non-fast-forward)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", "name": "bot-push-pull-1-head-forced", "cmd": "git push origin +<sha#1>:refs/pull/1/head", "ok": false, - "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: error: hook declined to update refs/pull/1/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/1/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: error: hook declined to update refs/pull/1/head", + "! [remote rejected] -> refs/pull/1/head (hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", "name": "bot-push-pull-999-head", "cmd": "git push origin <sha#1>:refs/pull/999/head", "ok": false, - "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: error: hook declined to update refs/pull/999/head \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/pull/999/head (hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: error: hook declined to update refs/pull/999/head", + "! [remote rejected] -> refs/pull/999/head (hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -64,7 +78,11 @@ "name": "bot-push-for-ref", "cmd": "git push origin <sha#1>:refs/for/main", "ok": false, - "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "To <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> refs/for/main (topic-branch is not set)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "! [remote rejected] -> refs/for/main (topic-branch is not set)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -99,7 +117,12 @@ "name": "read-collab-push-tag", "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", "ok": false, - "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'" + "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", + "refusal": [ + "remote: error: user permission denied for writing.", + "! [remote rejected] -> v-carol (pre-receive hook declined)", + "error: failed to push some refs to '/acme/refs.git'" + ] }, { "kind": "git", @@ -338,7 +361,7 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", @@ -440,7 +463,7 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", diff --git a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json index 1567919a..e40f7ae3 100644 --- a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json @@ -583,6 +583,12 @@ "$text" ] }, + { + "kind": "note", + "key": "unrelated_merge_exact_body", + "value": "", + "strict": false + }, { "kind": "http", "method": "GET", diff --git a/crates/forge/conformance/fixtures/1.26.2/W-protected-contents.json b/crates/forge/conformance/fixtures/1.26.2/W-protected-contents.json new file mode 100644 index 00000000..04db16ab --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/W-protected-contents.json @@ -0,0 +1,697 @@ +{ + "scenario": "W", + "title": "protected-contents", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/branch_protections", + "auth": "admin", + "status": 201, + "request": { + "branch_name": "main", + "enable_push": true + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": false, + "status_check_contexts": null, + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w1-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create on main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w1-bot.txt", + "path": "w1-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#1>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w1-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w1-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w1-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w1-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w1-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#1>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#2>", + "sha": "<sha#2>", + "created": "<ts>" + } + ], + "message": "create on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#3>", + "sha": "<sha#3>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w1-admin.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "eAo=", + "message": "create on main", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w1-admin.txt", + "path": "w1-admin.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#5>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w1-admin.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w1-admin.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w1-admin.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w1-admin.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w1-admin.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#5>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#1>", + "sha": "<sha#1>", + "created": "<ts>" + } + ], + "message": "create on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#6>", + "sha": "<sha#6>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/pcont/contents/README.md", + "auth": "bot", + "status": 200, + "request": { + "content": "cHVzaGFibGUK", + "message": "update on main", + "sha": "<sha#7>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#10>", + "last_commit_sha": "<sha#8>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 9, + "encoding": "base64", + "content": "cHVzaGFibGUK", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#10>", + "download_url": "<base>/acme/pcont/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#10>", + "html": "<base>/acme/pcont/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#8>", + "sha": "<sha#8>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#8>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#5>", + "sha": "<sha#5>", + "created": "<ts>" + } + ], + "message": "update on main\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#9>", + "sha": "<sha#9>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PATCH", + "path": "/api/v1/repos/acme/pcont/branch_protections/main", + "auth": "admin", + "status": 200, + "request": { + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w2-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check unmet", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w2-bot.txt", + "path": "w2-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#11>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w2-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w2-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w2-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w2-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w2-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#11>", + "sha": "<sha#11>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#11>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#8>", + "sha": "<sha#8>", + "created": "<ts>" + } + ], + "message": "create, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#12>", + "sha": "<sha#12>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w2-admin.txt", + "auth": "admin", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check unmet", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w2-admin.txt", + "path": "w2-admin.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#13>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w2-admin.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w2-admin.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w2-admin.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w2-admin.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w2-admin.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#13>", + "sha": "<sha#13>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#13>", + "author": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "<admin>", + "email": "admin@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#11>", + "sha": "<sha#11>", + "created": "<ts>" + } + ], + "message": "create, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#14>", + "sha": "<sha#14>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/repos/acme/pcont/contents/README.md", + "auth": "bot", + "status": 200, + "request": { + "content": "YWdhaW4K", + "message": "update, check unmet", + "sha": "<sha#10>", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "README.md", + "path": "README.md", + "sha": "<sha#17>", + "last_commit_sha": "<sha#15>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 6, + "encoding": "base64", + "content": "YWdhaW4K", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/README.md", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#17>", + "download_url": "<base>/acme/pcont/raw/branch/main/README.md", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/README.md?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#17>", + "html": "<base>/acme/pcont/src/branch/main/README.md" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#15>", + "sha": "<sha#15>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#15>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#13>", + "sha": "<sha#13>", + "created": "<ts>" + } + ], + "message": "update, check unmet\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#16>", + "sha": "<sha#16>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "git", + "name": "ff-push-enable-push-status-unmet", + "cmd": "git push origin HEAD:refs/heads/main", + "ok": true, + "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/pcont.git\n <short>..<short> HEAD -> main" + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/pcont/contents/w3-bot.txt", + "auth": "bot", + "status": 201, + "request": { + "content": "eAo=", + "message": "create, check met", + "branch": "main" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "content": { + "name": "w3-bot.txt", + "path": "w3-bot.txt", + "sha": "<sha#4>", + "last_commit_sha": "<sha#18>", + "last_committer_date": "<ts>", + "last_author_date": "<ts>", + "type": "file", + "size": 2, + "encoding": "base64", + "content": "eAo=", + "target": null, + "url": "<base>/api/v1/repos/acme/pcont/contents/w3-bot.txt?ref=main", + "html_url": "<base>/acme/pcont/src/branch/main/w3-bot.txt", + "git_url": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "download_url": "<base>/acme/pcont/raw/branch/main/w3-bot.txt", + "submodule_git_url": null, + "_links": { + "self": "<base>/api/v1/repos/acme/pcont/contents/w3-bot.txt?ref=main", + "git": "<base>/api/v1/repos/acme/pcont/git/blobs/<sha#4>", + "html": "<base>/acme/pcont/src/branch/main/w3-bot.txt" + } + }, + "commit": { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#18>", + "sha": "<sha#18>", + "created": "<ts>", + "html_url": "<base>/acme/pcont/commit/<sha#18>", + "author": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "committer": { + "name": "bot", + "email": "bot@example.invalid", + "date": "<ts>" + }, + "parents": [ + { + "url": "<base>/api/v1/repos/acme/pcont/git/commits/<sha#19>", + "sha": "<sha#19>", + "created": "<ts>" + } + ], + "message": "create, check met\n", + "tree": { + "url": "<base>/api/v1/repos/acme/pcont/git/trees/<sha#20>", + "sha": "<sha#20>", + "created": "<ts>" + } + }, + "verification": { + "verified": false, + "reason": "gpg.error.not_signed_commit", + "signature": "", + "signer": null, + "payload": "" + } + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/pcont/branch_protections/main", + "auth": "admin", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "branch_name": "main", + "rule_name": "main", + "priority": 1, + "enable_push": true, + "enable_push_whitelist": false, + "push_whitelist_usernames": [], + "push_whitelist_teams": [], + "push_whitelist_deploy_keys": false, + "enable_force_push": false, + "enable_force_push_allowlist": false, + "force_push_allowlist_usernames": [], + "force_push_allowlist_teams": [], + "force_push_allowlist_deploy_keys": false, + "enable_merge_whitelist": false, + "merge_whitelist_usernames": [], + "merge_whitelist_teams": [], + "enable_status_check": true, + "status_check_contexts": [ + "ci/test" + ], + "required_approvals": 0, + "enable_approvals_whitelist": false, + "approvals_whitelist_username": [], + "approvals_whitelist_teams": [], + "block_on_rejected_reviews": false, + "block_on_official_review_requests": false, + "block_on_outdated_branch": false, + "dismiss_stale_approvals": false, + "ignore_stale_approvals": false, + "require_signed_commits": false, + "protected_file_patterns": "", + "unprotected_file_patterns": "", + "block_admin_merge_override": false, + "created_at": "<ts>", + "updated_at": "<ts>" + } + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json new file mode 100644 index 00000000..e592a8e1 --- /dev/null +++ b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json @@ -0,0 +1,1604 @@ +{ + "scenario": "X", + "title": "auth-forms", + "error": null, + "exchanges": [ + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot", + "status": 201, + "request": { + "state": "success", + "context": "auth-0" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-0", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-bearer", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-bearer", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-bearer", + "status": 201, + "request": { + "state": "success", + "context": "auth-1" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-1", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-token-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-token-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-token-password", + "status": 201, + "request": { + "state": "success", + "context": "auth-2" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-2", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-token-user", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-token-user", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-token-user", + "status": 201, + "request": { + "state": "success", + "context": "auth-3" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-3", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-oauth2", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-oauth2", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-oauth2", + "status": 201, + "request": { + "state": "success", + "context": "auth-4" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-4", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-other-name", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-other-name", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-other-name", + "status": 201, + "request": { + "state": "success", + "context": "auth-5" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-5", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bot-basic-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "bot@example.invalid", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bot-basic-password", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "owner": { + "id": "<id:owner.id#1>", + "login": "acme", + "login_name": "", + "source_id": "<id:owner.source_id#1>", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "html_url": "<base>/acme", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "private", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "acme" + }, + "name": "authrepo", + "full_name": "acme/authrepo", + "description": "", + "empty": false, + "private": true, + "fork": false, + "template": false, + "mirror": false, + "size": 23, + "language": "", + "languages_url": "<base>/api/v1/repos/acme/authrepo/languages", + "html_url": "<base>/acme/authrepo", + "url": "<base>/api/v1/repos/acme/authrepo", + "link": "", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "clone_url": "<base>/acme/authrepo.git", + "original_url": "", + "website": "", + "stars_count": 0, + "forks_count": 0, + "watchers_count": 1, + "branch_count": 1, + "open_issues_count": 0, + "open_pr_counter": 0, + "release_counter": 0, + "default_branch": "main", + "archived": false, + "created_at": "<ts>", + "updated_at": "<ts>", + "archived_at": "<ts>", + "permissions": { + "admin": false, + "push": true, + "pull": true + }, + "has_code": true, + "has_issues": true, + "internal_tracker": { + "enable_time_tracker": true, + "allow_only_contributors_to_track_time": true, + "enable_issue_dependencies": true + }, + "has_wiki": true, + "has_pull_requests": true, + "has_projects": true, + "projects_mode": "all", + "has_releases": true, + "has_packages": true, + "has_actions": false, + "ignore_whitespace_conflicts": false, + "allow_merge_commits": true, + "allow_rebase": true, + "allow_rebase_explicit": true, + "allow_squash_merge": true, + "allow_fast_forward_only_merge": true, + "allow_rebase_update": true, + "allow_manual_merge": false, + "autodetect_manual_merge": false, + "default_delete_branch_after_merge": false, + "default_merge_style": "merge", + "default_allow_maintainer_edit": true, + "avatar_url": "", + "internal": false, + "mirror_interval": "", + "object_format_name": "sha1", + "mirror_updated": "<ts>", + "topics": [], + "licenses": [] + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bot-basic-password", + "status": 201, + "request": { + "state": "success", + "context": "auth-6" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "status": "success", + "target_url": "", + "description": "", + "url": "<base>/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "context": "auth-6", + "creator": { + "id": "<id:creator.id#1>", + "login": "bot", + "login_name": "", + "source_id": "<id:creator.source_id#1>", + "full_name": "", + "email": "3+bot@noreply.localhost", + "avatar_url": "<base>/avatars/588cf1ed573d796ba072435cf9899ab3", + "html_url": "<base>/bot", + "language": "", + "is_admin": false, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": false, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "bot" + }, + "created_at": "<ts>", + "updated_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad-bearer", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bad-bearer", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bad-bearer", + "status": 401, + "request": { + "state": "success", + "context": "auth-7" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "bad-basic-token-user", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/repos/acme/authrepo", + "auth": "bad-basic-token-user", + "status": 401, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/repos/acme/authrepo/statuses/<sha#1>", + "auth": "bad-basic-token-user", + "status": 401, + "request": { + "state": "success", + "context": "auth-8" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "invalid username, password or token", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/user", + "auth": "siteowner-pw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "login": "siteowner", + "login_name": "siteowner", + "source_id": "<id:source_id#1>", + "full_name": "", + "email": "siteowner@example.invalid", + "avatar_url": "<base>/avatars/870bfdc3421389d1a95662814583521b", + "html_url": "<base>/siteowner", + "language": "", + "is_admin": true, + "last_login": "<ts>", + "created": "<ts>", + "restricted": false, + "active": true, + "prohibit_login": false, + "location": "", + "website": "", + "description": "", + "visibility": "public", + "followers_count": 0, + "following_count": 0, + "starred_repos_count": 0, + "username": "siteowner" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "siteowner-pw", + "status": 201, + "request": { + "name": "by-site-admin-password", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "by-site-admin-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/bot/tokens", + "auth": "siteowner-pw", + "status": 200, + "headers": { + "content-type": "application/json;charset=utf-8", + "x-total-count": "3" + }, + "body": [ + { + "id": "<id:id#1>", + "name": "by-site-admin-password", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:repository" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#2>", + "name": "scoped", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "read:organization", + "write:repository", + "read:user" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + }, + { + "id": "<id:id#3>", + "name": "all", + "sha1": "<token>", + "token_last_eight": "<token>", + "scopes": [ + "all" + ], + "created_at": "<ts>", + "last_used_at": "<ts>" + } + ] + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/bot/tokens", + "auth": "admin", + "status": 401, + "request": { + "name": "by-admin-token", + "scopes": [ + "read:repository" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "auth required", + "url": "<base>/api/swagger" + } + }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro-as-password", + "status": 403, + "request": { + "name": "minted-by-readonly-token", + "scopes": [ + "all" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[write:user], token scope=read:repository", + "url": "<base>/api/swagger" + } + }, + { + "kind": "note", + "key": "readonly_token_as_password_status", + "value": 403, + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/api/v1/users/alice/tokens", + "auth": "alice-ro-as-password", + "status": 403, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "message": "token does not have at least one of required scope(s), required=[read:user], token scope=read:repository", + "url": "<base>/api/swagger" + }, + "volatile": [ + "id", + "name", + "scopes" + ] + } + ] +} diff --git a/crates/forge/conformance/fixtures/1.26.2/meta.json b/crates/forge/conformance/fixtures/1.26.2/meta.json index 30a02b35..0969f836 100644 --- a/crates/forge/conformance/fixtures/1.26.2/meta.json +++ b/crates/forge/conformance/fixtures/1.26.2/meta.json @@ -24,6 +24,8 @@ "S-ref-pushes.json", "T-merge-outcomes.json", "U-status-check-edges.json", - "V-smart-http-bytes.json" + "V-smart-http-bytes.json", + "W-protected-contents.json", + "X-auth-forms.json" ] } diff --git a/crates/forge/conformance/gitea-up.sh b/crates/forge/conformance/gitea-up.sh index e15efbff..f480f3cb 100755 --- a/crates/forge/conformance/gitea-up.sh +++ b/crates/forge/conformance/gitea-up.sh @@ -11,9 +11,10 @@ pass="$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')" # Pick a free host port, then let Docker bind it; retry if someone raced us. started=0 +err="" for _ in 1 2 3 4 5; do port="$(python3 -I -c 'import socket;s=socket.socket();s.bind(("127.0.0.1",0));print(s.getsockname()[1]);s.close()')" - if docker run -d --name "$name" -p "127.0.0.1:${port}:3000" \ + if err="$(docker run -d --name "$name" -p "127.0.0.1:${port}:3000" \ -e GITEA__database__DB_TYPE=sqlite3 \ -e GITEA__security__INSTALL_LOCK=true \ -e GITEA__service__DISABLE_REGISTRATION=true \ @@ -24,13 +25,18 @@ for _ in 1 2 3 4 5; do -e GITEA__repository__DEFAULT_PRIVATE=private \ -e GITEA__repository__FORCE_PRIVATE=true \ -e GITEA__server__OFFLINE_MODE=true \ - "$image" >/dev/null 2>&1; then + "$image" 2>&1)"; then started=1 break fi + # Only a lost port race is worth retrying; anything else (missing image, daemon down) is fatal. docker rm -f "$name" >/dev/null 2>&1 || true + case "$err" in + *"port is already allocated"*|*"address already in use"*|*"ports are not available"*) ;; + *) echo "docker run failed for $image: $err" >&2; exit 1 ;; + esac done -[ "$started" = 1 ] || { echo "could not start $image" >&2; exit 1; } +[ "$started" = 1 ] || { echo "could not start $image after retries: $err" >&2; exit 1; } trap 'docker rm -f "$name" >/dev/null 2>&1 || true' ERR base="http://127.0.0.1:${port}" diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py index 83c55a7f..d199c15d 100644 --- a/crates/forge/conformance/run.py +++ b/crates/forge/conformance/run.py @@ -161,7 +161,39 @@ def msg_text(ex): return ex.get("body_text") or ex.get("output") or "" -def cmp_exchange(exp, act, bij): +def norm_msg(t): + """Compare error text without ids, hosts or trailing `[uid: 0, name: ]` detail.""" + t = re.sub(r"<[^<>]*>", "", (t or "").lower()) + t = re.sub(r"\s*\[[^\]]*\]\s*$", "", t) + return re.sub(r"\s+", " ", t).strip(" .:\n") + + +def err_text(v): + if isinstance(v, str): + return v + if isinstance(v, list): + return " ".join(x for x in v if isinstance(x, str)) + return "" + + +NOISE = re.compile(r"processed|processing|references in total|create a new pull request|resolving|counting|compressing") + + +def refusal_lines(text): + """The lines of a failed git command that say why it failed (remote:/fatal:/error:/! lines), normalized.""" + out = [] + for raw in text.splitlines(): + l = raw.strip() + if not re.match(r"^(remote:|fatal:|error:|!)", l): + continue + l = re.sub(r"\s+", " ", re.sub(r"<[^<>]*>", "", l).lower()).strip() + if l in ("remote:", "error:", "!", "remote: error:") or NOISE.search(l) or l in out: + continue + out.append(l) + return out + + +def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): """Return [(level, text)] where level is 'fail' or 'warn'. Empty list means match.""" d = [] bij.new_exchange() @@ -170,27 +202,43 @@ def cmp_exchange(exp, act, bij): if exp["kind"] == "note": if exp["key"] != act["key"]: d.append(("fail", f"note {exp['key']} expected, got {act['key']}")) - elif exp["value"] != act["value"]: - lvl = "fail" if exp.get("strict", True) else "warn" - d.append((lvl, f"note {exp['key']}: {exp['value']!r} expected, got {act['value']!r}")) + elif exp["value"] != act["value"] and exp.get("strict", True): # strict=False notes are informational + d.append(("fail", f"note {exp['key']}: {exp['value']!r} expected, got {act['value']!r}")) return d if exp["kind"] == "git": if exp["name"] != act["name"]: return [("fail", f"git step {exp['name']} expected, got {act['name']}")] if exp["ok"] != act["ok"]: d.append(("fail", f"git ok={exp['ok']} expected, got {act['ok']}: {act['output'][:200]!r}")) + elif not exp["ok"]: + have = act.get("refusal") or refusal_lines(act["output"]) + for line in exp.get("refusal", []): + if line not in have: + d.append(("fail", f"git refusal {line!r} expected, got {have[:4]!r}")) else: if exp["method"] != act["method"] or not eq_str(exp["path"], act["path"], bij, [], ""): return [("fail", f"request {exp['method']} {exp['path']} expected, got {act['method']} {act['path']}")] - if exp["status"] != act["status"]: - d.append(("fail", f"status {exp['status']} expected, got {act['status']}: {msg_text(act)[:200]!r}")) + es = exp["status"] if status_override is None else status_override + if es != act["status"]: + d.append(("fail", f"status {es} expected, got {act['status']}: {msg_text(act)[:200]!r}")) + elif es >= 400 and isinstance(exp.get("body"), dict) and status_override is None: + ab = act.get("body") if isinstance(act.get("body"), dict) else None + for key in ("message", "errors"): + if key not in exp["body"]: + continue + ev = err_text(exp["body"][key]) + if key == "errors" and not ev: + continue + av = err_text(ab.get(key)) if ab is not None else (msg_text(act) if key == "message" else "") + if norm_msg(ev) != norm_msg(av): + d.append(("fail", f"{key} {ev!r} expected, got {av!r}")) for h, v in exp.get("headers", {}).items(): got = act.get("headers", {}).get(h) if got is None: d.append(("fail", f"header {h}: expected {v!r}, missing")) else: eq_str(v, got, bij, d, f"header {h}") - volatile = set(exp.get("volatile", [])) + volatile = set(exp.get("volatile", [])) | set(extra_volatile) if "body" in exp: if "body" not in act: d.append(("fail", f"expected JSON body, got {act.get('body_text', '')[:120]!r}")) @@ -210,6 +258,50 @@ def cmp_exchange(exp, act, bij): return d +# ---- departures: reviewed, intentional differences from the recorded Gitea behaviour + +def dep_indexes(spec, expected): + if isinstance(spec, bool): + return [] + if isinstance(spec, int): + return [spec] + if isinstance(spec, list): + return [i for x in spec for i in dep_indexes(x, expected)] + m = re.fullmatch(r"(\d+)-(\d+)", str(spec)) + if m: + return list(range(int(m.group(1)), int(m.group(2)) + 1)) + return [i for i, e in enumerate(expected) if e.get("name") == spec or e.get("key") == spec] + + +def apply_override(exp, act, ov, bij): + """Check `act` against a departure instead of the recorded exchange.""" + e, why, d = ov["expect"], ov.get("reason", ""), [] + if e.get("skip"): + return [("honoured", f"skipped: {why}")] + if act["kind"] == "note": + if "value" in e and act["value"] != e["value"]: + d.append(("fail", f"unexpected: note {act['key']} {e['value']!r} expected, got {act['value']!r}")) + elif act["kind"] == "git": + if "ok" in e and act["ok"] != e["ok"]: + d.append(("fail", f"unexpected: git ok={e['ok']} expected, got {act['ok']}: {act['output'][:160]!r}")) + txt = act["output"].lower() + for w in e.get("message_contains", []): + if w.lower() not in txt: + d.append(("fail", f"unexpected: output lacks {w!r}")) + else: + sts = e.get("status") + sts = sts if isinstance(sts, list) else ([sts] if sts is not None else None) + if sts is not None and act["status"] not in sts: + d.append(("fail", f"unexpected: status {sts} expected, got {act['status']}: {msg_text(act)[:160]!r}")) + txt = msg_text(act).lower() + for w in e.get("message_contains", []): + if w.lower() not in txt: + d.append(("fail", f"unexpected: message lacks {w!r}: {txt[:160]!r}")) + if not e.get("ignore_body") and e.get("ignore_fields") and sts is None: + d += [x for x in cmp_exchange(exp, act, bij, extra_volatile=e["ignore_fields"]) if x[0] == "fail"] + return d or [("honoured", why)] + + # --------------------------------------------------------------------------- context class Ctx: @@ -220,8 +312,7 @@ def __init__(self, base, admin_token, mode): self.secrets = {admin_token} self.pw = {} self.vars = {} - self.tmp = os.path.realpath(tempfile.mkdtemp(prefix="sc-conf-")) - os.makedirs(self.tmp + "/home") + self.tmp = None self.admin_user = "siteadmin" bad = secrets.token_hex(20) self.secrets.add(bad) @@ -236,8 +327,10 @@ def __init__(self, base, admin_token, mode): self.expected = [] self.cursor = 0 self.diffs = [] # (scenario, index, label, [(level, text)]) + self.overrides = {} # fixture index -> departure entry, check mode only self.verbose = False self.base_ready = False + self.first_read = None r = self.call("GET", "/user", rec=False) if r.status != 200 or not r.json: raise SystemExit(f"admin token rejected by {self.base}: {r.status} {r.text[:200]}") @@ -245,6 +338,9 @@ def __init__(self, base, admin_token, mode): self.principals["admin"]["user"] = self.admin_user self.principals["admin-basic"] = dict(self.principals["admin"], kind="basic") self.principals["admin-bearer"] = dict(self.principals["admin"], kind="bearer") + # last: nothing above may exit with a temp dir to leak (cmd_run removes it in a finally) + self.tmp = os.path.realpath(tempfile.mkdtemp(prefix="sc-conf-")) + os.makedirs(self.tmp + "/home") # -- normalization def sha_ph(self, h): @@ -258,7 +354,9 @@ def scrub(self, s): for sec in sorted(self.secrets, key=len, reverse=True): if sec: s = s.replace(sec, "<token>") - s = s.replace(self.base, "<base>").replace(self.hostport, "<host>").replace(self.tmp, "<tmp>") + s = s.replace(self.base, "<base>").replace(self.hostport, "<host>") + if self.tmp: + s = s.replace(self.tmp, "<tmp>") return re.sub(r"\b%s\b" % re.escape(self.admin_user), "<admin>", s) def ns(self, s): @@ -311,7 +409,12 @@ def push_ex(self, ex): if i >= len(self.expected): self.diffs.append((i, ex_label(ex), [("fail", "extra exchange not present in fixture")])) else: - self.diffs.append((i, ex_label(ex), cmp_exchange(self.expected[i], ex, self.bij))) + exp = self.expected[i] + if i in self.overrides: + ds = apply_override(exp, ex, self.overrides[i], self.bij) + else: + ds = cmp_exchange(exp, ex, self.bij) + self.diffs.append((i, ex_label(ex), ds)) def note(self, key, value, strict=True): self.push_ex({"kind": "note", "key": key, "value": value, "strict": strict}) @@ -324,7 +427,7 @@ def new_password(self): # -- HTTP def call(self, method, path, json=None, as_="admin", expect=None, must_contain=None, volatile=None, headers=None, data=None, api=True, binary=False, rec=True, track=(), - retry_while=None, retry_s=90, no_retry=False): + retry_while=None, retry_s=90, no_retry=False, settle_keys=None): full = ("/api/v1" + path) if api else path hdrs = {"Accept": "application/json", "User-Agent": "sc-forge-conformance"} p = self.principals[as_] @@ -333,6 +436,8 @@ def call(self, method, path, json=None, as_="admin", expect=None, must_contain=N hdrs["Authorization"] = "token " + p["secret"] elif p["kind"] == "bearer": hdrs["Authorization"] = "Bearer " + p["secret"] + elif p["kind"] == "basic-nopass": # the token as the Basic user name, empty password + hdrs["Authorization"] = "Basic " + base64.b64encode(f"{p['secret']}:".encode()).decode() else: hdrs["Authorization"] = "Basic " + base64.b64encode(f"{p['user']}:{p['secret']}".encode()).decode() if json is not None: @@ -341,19 +446,38 @@ def call(self, method, path, json=None, as_="admin", expect=None, must_contain=N hdrs.update(headers or {}) if retry_while is None and method == "POST" and path.endswith("/merge") and not no_retry: retry_while = ["try again later"] - deadline = time.time() + retry_s - while True: + def send(): req = urllib.request.Request(self.base + full, data=data, method=method, headers=hdrs) try: with OPENER.open(req, timeout=120) as resp: - r = R(resp.status, dict(resp.headers), resp.read()) + return R(resp.status, dict(resp.headers), resp.read()) except urllib.error.HTTPError as e: - r = R(e.code, dict(e.headers), e.read()) + return R(e.code, dict(e.headers), e.read()) + + deadline = time.time() + retry_s + while True: + r = send() # `retry_while`: re-send while the response text has one of these markers, and record only the # last response (used for Gitea's "Please try again later" while a PR is being checked) if not retry_while or time.time() >= deadline or not any(w in r.text.lower() for w in retry_while): break time.sleep(1) + if settle_keys and r.status == 200 and r.is_json: + # Gitea updates some repo fields (empty, default_branch) asynchronously after a push: record the + # value that is stable on 8 consecutive reads (4 s, <= 25 s); the first read is left in `first_read` + def proj(x): + def get(b, k): + for part in k.split("."): + b = b.get(part) if isinstance(b, dict) else None + return b + return [get(x.json, k) for k in settle_keys] if x.is_json else None + hist = [proj(r)] + self.first_read = dict(zip(settle_keys, hist[0])) + end = time.time() + 25 + while time.time() < end and not (len(hist) >= 8 and all(h == hist[-1] for h in hist[-8:])): + time.sleep(0.5) + r = send() + hist.append(proj(r)) if rec: ex = {"kind": "http", "method": method, "path": self.np(full), "auth": as_, "status": r.status} @@ -403,6 +527,8 @@ def git(self, args, cwd=None, name=None, rec=True, ok=None, must_contain=None, e "output": self.ns(out.strip()[-2000:])} if must_contain: ex["must_contain"] = list(must_contain) + if p.returncode != 0: + ex["refusal"] = refusal_lines(ex["output"]) self.push_ex(ex) want = ok if ok is not None else (None if rec else True) if want is not None and (p.returncode == 0) != want: @@ -513,7 +639,7 @@ def deco(fn): return deco -def run_all(c, only, out=None, fixtures=None): +def run_all(c, only, out=None, fixtures=None, departures=()): summary = [] for sid, slug, needs_base, fn in SCENARIOS: if only and sid not in only: @@ -530,6 +656,22 @@ def run_all(c, only, out=None, fixtures=None): fx = J.load(open(fp)) c.expected = fx["exchanges"] skip = fx.get("error") + c.overrides, stale = {}, [] + for dep in departures: + if dep["scenario"] != sid: + continue + idx = dep_indexes(dep["exchange"], c.expected) + bad = [i for i in idx if not 0 <= i < len(c.expected)] + if not idx or bad: + stale.append(f"stale departure {dep['exchange']!r}: no such exchange in {fname} ({dep.get('reason', '')})") + for i in idx: + if i in bad: + continue + if dep.get("label") and dep["label"] not in ex_label(c.expected[i]) and len(idx) == 1: + stale.append(f"stale departure #{i}: fixture exchange is {ex_label(c.expected[i])!r}, " + f"departure says {dep['label']!r}") + continue + c.overrides[i] = dep t0 = time.time() err = None try: @@ -537,7 +679,7 @@ def run_all(c, only, out=None, fixtures=None): ensure_base(c) fn(c) except Exception as e: # noqa: BLE001 - scenario failures are data - err = f"{type(e).__name__}: {e}" + err = c.ns(f"{type(e).__name__}: {e}")[:1500] dt = time.time() - t0 if c.mode == "record": os.makedirs(out, exist_ok=True) @@ -549,24 +691,35 @@ def run_all(c, only, out=None, fixtures=None): lines, failed = [], False for i, label, ds in c.diffs: bad = [x for x in ds if x[0] == "fail"] + hon = [x for x in ds if x[0] == "honoured"] failed |= bool(bad) - if bad or ds or c.verbose: - lines.append(f" {'FAIL' if bad else ('warn' if ds else 'ok ')} #{i:02d} {label}") - lines += [f" {lv}: {t}" for lv, t in ds] + if bad or hon or ds or c.verbose: + tag = "FAIL" if bad else ("ok* " if hon else ("warn" if ds else "ok ")) + lines.append(f" {tag} #{i:02d} {label}") + lines += [f" {'expected difference honoured' if lv == 'honoured' else lv}: {t}" for lv, t in ds] if err: + if skip and norm_msg(skip) == norm_msg(err): + lines.append(f" (fixture recorded the same error: {skip[:200]})") + else: + failed = True + lines.append(f" ERROR {err}") + if skip: + lines.append(f" fixture recorded a different error: {skip[:300]}") + elif skip: failed = True - lines.append(f" ERROR {err}") - if skip: - failed = False - lines.append(f" (fixture recorded the same error: {skip})") + lines.append(f" FAIL fixture recorded an error but the scenario completed: {skip[:300]}") elif len(c.ex) < len(c.expected): failed = True lines.append(f" FAIL {len(c.expected) - len(c.ex)} recorded exchange(s) not produced") + if stale: + failed = True + lines += [" FAIL " + x for x in stale] summary.append((sid, slug, "FAIL" if failed else "ok", lines, len(c.ex), dt)) return summary def cmd_run(a): + deps = J.load(open(a.departures)) if getattr(a, "departures", None) else [] c = Ctx(a.base_url, a.admin_token, a.cmd) c.verbose = a.verbose only = set(a.only.split(",")) if a.only else None @@ -580,9 +733,10 @@ def cmd_run(a): J.dump({"server_version": ver, "scenarios": sorted(x for x in os.listdir(a.out) if x.endswith(".json") and x != "meta.json")}, f, indent=2) f.write("\n") else: - summary = run_all(c, only, fixtures=a.fixtures) + summary = run_all(c, only, fixtures=a.fixtures, departures=deps) finally: - shutil.rmtree(c.tmp, ignore_errors=True) + if c.tmp: + shutil.rmtree(c.tmp, ignore_errors=True) bad = 0 for s in summary: sid, slug, st, lines = s[:4] @@ -666,6 +820,7 @@ def main(): p.add_argument("--out", required=True) else: p.add_argument("--fixtures", required=True) + p.add_argument("--departures", help="JSON list of reviewed differences from the recorded behaviour") p = sub.add_parser("diff") p.add_argument("a") p.add_argument("b") @@ -841,7 +996,7 @@ def sc_history(c): f1 = c.push_branch("hist", "feat/x", {"feat1.txt": "f1\n"}, base=c2, msg="feat one") f2 = c.push_branch("hist", "feat/x", {"feat2.txt": "f2\n"}, base="origin/feat/x", msg="feat two") R = "/repos/acme/hist" - c.call("GET", R) + repo_state(c, R, "hist") c.call("GET", R + "/branches") c.call("GET", R + "/branches?limit=1&page=2") c.call("GET", R + "/branches/main") @@ -958,6 +1113,13 @@ def parents(c, repo, sha): return len(c.git(["rev-list", "--parents", "-n1", sha], cwd=p, rec=False)[1].split()) - 1 +def repo_state(c, path, label): + """GET a repo whose `empty`/`default_branch` may lag a push: record the settled value, keep the race as a note.""" + r = c.call("GET", path, settle_keys=["empty", "default_branch"]) + c.note(f"{label}_first_read", c.first_read, strict=False) + return r + + def tokbasic(c, who): return "none" if who == "none" else f"{who}-tokbasic" @@ -1151,8 +1313,8 @@ def settle_merged(n, label): def sc_statuses(c): c.mk_repo("status") R = "/repos/acme/status" - shas = [c.head("status")] + [c.api_file("status", f"f{i}.txt", f"{i}\n", f"commit {i}") for i in range(1, 5)] - s0, s1, s2, s3, s4 = shas + shas = [c.head("status")] + [c.api_file("status", f"f{i}.txt", f"{i}\n", f"commit {i}") for i in range(1, 6)] + s0, s1, s2, s3, s4, s5 = shas def post(sha, state, ctx, **kw): body = {"state": state, "context": ctx, "description": f"{ctx} is {state}", "target_url": "http://example.invalid/run/1"} @@ -1169,6 +1331,7 @@ def combined(sha): post(s1, "pending", "ci/test", as_="bot-scoped", expect=201) r = combined(s1) c.note("combined_state_pending", r.json["state"]) + time.sleep(1.1) # same-second statuses list in random order on some versions post(s1, "success", "ci/test", as_="bot-scoped", expect=201) r = combined(s1) c.note("combined_statuses_after_pending_then_success", len(r.json["statuses"])) @@ -1198,6 +1361,12 @@ def combined(sha): post("nope", "success", "ci/test") post(s4, "success", "ci/test", as_="carol") post(s4, "success", "ci/test", as_="dave") + # a commit whose only status has an unknown state string + post(s5, "bogus", "ci/bogus-only", expect=201) + r = combined(s5) + c.note("combined_state_only_bogus", r.json["state"]) + c.note("combined_total_only_bogus", r.json["total_count"]) + c.call("GET", R + f"/statuses/{s5}?limit=100") combined("0123456789abcdef0123456789abcdef01234567") c.call("GET", R + "/commits/main/status?limit=50") c.call("GET", R + "/statuses/main?limit=100") @@ -1409,21 +1578,21 @@ def sc_default_branch(c): c.call("DELETE", R + "/branches/dev") # empty repo, first push name decides? c.mk_repo("fresh1", auto_init=False) - c.call("GET", "/repos/acme/fresh1") + repo_state(c, "/repos/acme/fresh1", "fresh1_before_push") c.push_branch("fresh1", "trunk", {"t.txt": "t\n"}, base=None) - c.call("GET", "/repos/acme/fresh1") + repo_state(c, "/repos/acme/fresh1", "fresh1_after_trunk") c.git(["ls-remote", "--symref", c.git_url("fresh1"), "HEAD"], name="ls-remote-symref-trunk-first") c.call("GET", "/repos/acme/fresh1/branches") c.mk_repo("fresh2", auto_init=False) c.push_branch("fresh2", "main", {"t.txt": "t\n"}, base=None) - c.call("GET", "/repos/acme/fresh2") + repo_state(c, "/repos/acme/fresh2", "fresh2_after_main") c.mk_repo("fresh3", auto_init=False, default_branch="develop") - c.call("GET", "/repos/acme/fresh3") + repo_state(c, "/repos/acme/fresh3", "fresh3_before_push") c.push_branch("fresh3", "main", {"t.txt": "t\n"}, base=None) - c.call("GET", "/repos/acme/fresh3") + repo_state(c, "/repos/acme/fresh3", "fresh3_after_main") c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-main-pushed-first") c.push_branch("fresh3", "develop", {"u.txt": "u\n"}, base="origin/main") - c.call("GET", "/repos/acme/fresh3") + repo_state(c, "/repos/acme/fresh3", "fresh3_after_develop") c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-develop-pushed-second") @@ -1469,7 +1638,8 @@ def sc_pr_lifecycle(c): time.sleep(1) c.call("GET", R + f"/pulls/{n4}", as_=A) c.call("PATCH", R + f"/pulls/{n4}", {"state": "open"}, as_=A) - c.call("GET", R + f"/pulls/{n4}", as_=A) + # 1.26 answers "open" and then sometimes reverts the PR to "closed" (head branch missing): racy, state not compared + c.call("GET", R + f"/pulls/{n4}", as_=A, volatile=["state", "closed_at"]) # 5. head commit pushed straight into base n5, s5 = mkpr(c, "life", "l5", {"l5.txt": "5\n"}) c.git(["push", "-q", "origin", f"{s5}:refs/heads/main"], cwd=wcp, rec=False) @@ -1631,20 +1801,22 @@ def sc_outcomes(c): def getpr(n): return c.call("GET", R + f"/pulls/{n}", as_=A, volatile=["mergeable"]) - def try_pr(title, head): + def try_pr(title, head, raw_note=None): """Open a PR and record what Gitea says about it and about merging it.""" r = c.call("POST", R + "/pulls", {"title": title, "head": head, "base": "main"}, as_=A, volatile=["mergeable"]) if r.status == 201: n = r.json["number"] time.sleep(6) getpr(n) - c.call("POST", R + f"/pulls/{n}/merge", {"Do": "merge"}, as_=A, no_retry=True, - volatile=["$text"]) # 1.26 sends a truncated JSON body here, sometimes empty + m = c.call("POST", R + f"/pulls/{n}/merge", {"Do": "merge"}, as_=A, no_retry=True, + volatile=["$text"]) # 1.26 sends a truncated JSON body here, sometimes empty + if raw_note: + c.note(raw_note, c.ns(m.text), strict=False) getpr(n) return r c.push_branch("outcomes", "orph", {"orph.txt": "o\n"}, base=None) - try_pr("unrelated", "orph") + try_pr("unrelated", "orph", raw_note="unrelated_merge_exact_body") c.push_branch("outcomes", "tid", {"t.txt": "t\n"}) c.git(["rm", "-q", "t.txt"], cwd=wcp, rec=False) c.git(["commit", "-q", "-m", "remove t"], cwd=wcp, rec=False) @@ -1757,6 +1929,82 @@ def advert_notes(svc, label): c.call("POST", "/acme/wire.git/git-upload-pack", data=req, headers=ct, as_="dave-tokbasic", api=False) +@scenario("W", "protected-contents") +def sc_protected_contents(c): + c.mk_repo("pcont") + R = "/repos/acme/pcont" + c.call("POST", R + "/branch_protections", {"branch_name": "main", "enable_push": True}, expect=201) + for who in ("bot", "admin"): + c.call("POST", R + f"/contents/w1-{who}.txt", {"content": b64("x\n"), "message": "create on main", + "branch": "main"}, as_=who) + sha = c.call("GET", R + "/contents/README.md", rec=False).json["sha"] + c.call("PUT", R + "/contents/README.md", {"content": b64("pushable\n"), "message": "update on main", "sha": sha, + "branch": "main"}, as_="bot") + # now require ci/test and post nothing + c.call("PATCH", R + "/branch_protections/main", {"enable_status_check": True, "status_check_contexts": ["ci/test"]}) + for who in ("bot", "admin"): + c.call("POST", R + f"/contents/w2-{who}.txt", {"content": b64("x\n"), "message": "create, check unmet", + "branch": "main"}, as_=who) + sha = c.call("GET", R + "/contents/README.md", rec=False).json["sha"] + c.call("PUT", R + "/contents/README.md", {"content": b64("again\n"), "message": "update, check unmet", + "sha": sha, "branch": "main"}, as_="bot") + # direct fast-forward push: enable_push:true + required context unmet + p = c.wc("pcont", "bot") + c.git(["fetch", "-q", "origin"], cwd=p, rec=False) + c.git(["checkout", "-q", "-B", "work", "origin/main"], cwd=p, rec=False) + local_commit(c, p, {"ff.txt": "ff\n"}) + c.git(["push", "origin", "HEAD:refs/heads/main"], cwd=p, name="ff-push-enable-push-status-unmet") + # and once the required context has succeeded on the tip + tip = c.head("pcont") + c.call("POST", R + f"/statuses/{tip}", {"state": "success", "context": "ci/test"}, expect=201, rec=False) + c.call("POST", R + "/contents/w3-bot.txt", {"content": b64("x\n"), "message": "create, check met", "branch": "main"}, + as_="bot") + c.call("GET", R + "/branch_protections/main") + + +@scenario("X", "auth-forms") +def sc_auth_forms(c): + c.mk_repo("authrepo") + R = "/repos/acme/authrepo" + sha = c.head("authrepo") + tok = c.principals["bot"]["secret"] + c.principals["bot-bearer"] = dict(c.principals["bot"], kind="bearer") + c.principals["bot-basic-token-password"] = dict(c.principals["bot"], kind="basic") + c.principals["bot-basic-token-user"] = dict(c.principals["bot"], kind="basic-nopass") + c.principals["bot-basic-oauth2"] = dict(c.principals["bot"], kind="basic", user="oauth2") + c.principals["bot-basic-other-name"] = dict(c.principals["bot"], kind="basic", user="someone") + c.principals["bad-bearer"] = dict(c.principals["bad"], kind="bearer") + c.principals["bad-basic-token-user"] = dict(c.principals["bad"], kind="basic-nopass") + c.principals["bot-basic-password"] = {"kind": "basic", "user": "bot", "secret": c.pw["bot"]} + forms = ["bot", "bot-bearer", "bot-basic-token-password", "bot-basic-token-user", "bot-basic-oauth2", + "bot-basic-other-name", "bot-basic-password", "bad-bearer", "bad-basic-token-user"] + for i, who in enumerate(forms): + c.call("GET", "/user", as_=who) + c.call("GET", R, as_=who) + c.call("POST", R + f"/statuses/{sha}", {"state": "success", "context": f"auth-{i}"}, as_=who) + # site admin with a password + pw = c.new_password() + c.call("POST", "/admin/users", {"username": "siteowner", "email": "siteowner@example.invalid", "password": pw, + "must_change_password": False}, expect=201, rec=False) + c.call("PATCH", "/admin/users/siteowner", {"login_name": "siteowner", "source_id": 0, "admin": True}, expect=200, rec=False) + c.principals["siteowner-pw"] = {"kind": "basic", "user": "siteowner", "secret": pw} + c.call("GET", "/user", as_="siteowner-pw") + r = c.call("POST", "/users/bot/tokens", {"name": "by-site-admin-password", "scopes": ["read:repository"]}, + as_="siteowner-pw") + c.call("GET", "/users/bot/tokens", as_="siteowner-pw") + c.call("POST", "/users/bot/tokens", {"name": "by-admin-token", "scopes": ["read:repository"]}, as_="admin") + # a read-only token used as the Basic password mints what? + c.principals["alice-ro-as-password"] = {"kind": "basic", "user": "alice", "secret": c.principals["alice-ro"]["secret"]} + r = c.call("POST", "/users/alice/tokens", {"name": "minted-by-readonly-token", "scopes": ["all"]}, + as_="alice-ro-as-password") + c.note("readonly_token_as_password_status", r.status) + if r.status == 201: + c.secrets.add(r.json["sha1"]) + c.principals["minted"] = {"kind": "token", "user": "alice", "secret": r.json["sha1"]} + c.call("POST", "/user/repos", {"name": "minted-probe", "private": True}, as_="minted") + c.call("GET", "/users/alice/tokens", as_="alice-ro-as-password", volatile=["id", "name", "scopes"]) + + # @@SCENARIOS@@ if __name__ == "__main__": From 9d2a7f5fd2e69ce8bc4a34ab8f5ae224f634808d Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 15:34:19 +0300 Subject: [PATCH 07/23] docs(forge): record follow-up scenarios, admin token-minting rule --- crates/forge/conformance/FINDINGS.md | 31 +++++++++++++++++++ .../specs/2026-10-22-p38-forge-design.md | 10 +++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/crates/forge/conformance/FINDINGS.md b/crates/forge/conformance/FINDINGS.md index 7cb6f2b7..30d010f1 100644 --- a/crates/forge/conformance/FINDINGS.md +++ b/crates/forge/conformance/FINDINGS.md @@ -159,3 +159,34 @@ Each version passes its own fixtures (22/22). Checking the 1.22.6 fixtures again - A full record run takes about 2.5 to 3 minutes per version and needs a fresh server (the merge scenario waits for Gitea's async PR checks and is the slowest, about 45 s). - Fixtures are 3.5 MB across the two versions; compact JSON would roughly halve that. + +## Additional recordings (review follow-up) + +Scenarios W (protected contents) and X (auth forms, token minting), plus additions to H and T. + +- **Contents API on a protected `main` with `enable_push:true`:** allowed, with and without + `enable_status_check`, even with the required context unmet and nothing posted (`POST contents` 201, + `PUT contents` 200, for the write collaborator and the admin). Only `enable_push:false` blocks it + (403, scenario Q). +- **Direct fast-forward push with `enable_push:true`, status check on, context unmet:** accepted + (W#8; I#12 confirms). Required status checks gate merges, not pushes. +- **Auth forms on API routes** (`GET /user`, a private repo read, `POST statuses`): `Authorization: + token T`, `Bearer T`, Basic `bot:T`, `oauth2:T`, `anyname:T`, Basic `T:`, and Basic with the real + password all work. A bad token is 401 in every form. +- **Token minting:** the site admin using Basic with the admin's **password** on `POST + /users/bot/tokens` is allowed (201) and may list (200). The admin's **token** on that route is `401 + "auth required"`. A read-only token used as the Basic password on `POST /users/alice/tokens` is + refused with 403 (`required scope write:user`) and mints nothing; listing with it is 403 + (`read:user`). +- **Combined status:** unknown sha is `200` with empty fields on 1.22.6 and 404 on 1.26.2. A lone + `bogus` status reads `state:"bogus"` on 1.22.6 and `"pending"` on 1.26.2, both with `total_count:1`. + (An earlier note here said an unknown state counts as failing; that holds only in a mix.) +- **Unrelated-histories merge:** 409. The 1.22.6 body is `{"Style":"merge","StdOut":"","StdErr":"fatal: + refusing to merge unrelated histories\n","Err":{"Stderr":null}}` (no `message` key); the 1.26.2 body + is truncated or empty. +- **Reopening a closed PR whose head branch was deleted** is racy on 1.26.2: the PATCH answers `open`, + then the PR sometimes reverts to `closed` (3 of 6 trials). That state is volatile and excluded from + comparison. +- **Harness notes:** `--only` reruns can differ from the full ordered run because later scenarios read + state from earlier ones (scenario B makes `alice` private); the full run is the reference. Cross-version + `check` now fails about 310 exchanges because error text is compared. diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 35b10eab..a85443a7 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -170,7 +170,7 @@ their binary's, and `serve` never caches users or tokens across requests. | Route class | Accepted credential | Additional rule | |---|---|---| -| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. (Recorded Gitea accepts an all-scope token as the Basic password on these routes. Whether a read-only token can mint a broader one that way was not recorded in the first pass; accepting any token here would let it, so this is a defensive departure. Site admins are held to the same rule until a recording shows otherwise.) | Authenticated user must equal `{u}`. | +| `/users/{u}/tokens*` | Basic with the user's **password only**. A token is never accepted here, as password or header. (Recorded Gitea accepts an all-scope token as the Basic password on these routes. Whether a read-only token can mint a broader one that way was not recorded in the first pass; accepting any token here would let it, so this is a defensive departure. A read-only token as the Basic password is refused 403 in Gitea, so the defensive departure only closes the broader-scope variants.) | Authenticated user must equal `{u}`, or be a site admin authenticating with their own password (recorded: allowed in Gitea; the admin's token is 401 there). | | `admin/*` | Token with `write:admin` (or `read:admin` for GETs), user must be site admin. | | | Everything else | `token T`, `Bearer T`, or Basic with a **token** as password under any username, or the token as username with an empty password (recorded for git; API recordings for Bearer and token-as-username are in the follow-up scenarios). A Basic password is never tried as a user password. | Scope and actor rules below. | @@ -501,7 +501,7 @@ header. Decisions drawn from it, beyond those stated in the sections above: 405 "try again later"; unrelated histories answer a classifiable 409; `Do` other than `merge` is 422 (Gitea: 500 for `fast-forward-only`, other styles accepted); `private:false` is not stored; token routes refuse tokens and - require the caller to be `{u}`; client pushes limited to `refs/heads/*` and + require the caller to be `{u}` or a password-authenticated site admin; client pushes limited to `refs/heads/*` and `refs/tags/*`; unknown status states are 422; repo rename is 422; `PATCH default_branch` to a missing branch is 422; a merged PR's head is frozen; receive-pack on a missing repo is 404. Not departures, by the version rule: @@ -510,9 +510,9 @@ header. Decisions drawn from it, beyond those stated in the sections above: ## Open questions -1. Site admins minting tokens for other users and a read-only token used as a - Basic password on token routes are recorded in the follow-up scenarios; the - spec's rule for them is provisional until those land. +1. The merge of a PR whose head is already in base (recorded: 405 `try again later`, + `changed_files` 0) has no departure entry; sc-forge reproduces it, so the + fixture applies unchanged. 2. TLS: all known deployments terminate at a proxy or private network. Add `tlsio` only if one needs it (it needs a sync-to-hyper adapter). 3. Which Gitea version string `/version` reports; whether `has_actions` PATCH is From 762769ae3601edf7d7d4ab68812ef594d63beaf6 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 15:53:40 +0300 Subject: [PATCH 08/23] docs(forge): fix status/contents/token-rule contradictions found in second review --- crates/forge/conformance/FINDINGS.md | 3 ++- ...058-sc-forge-gitea-compatible-git-forge.md | 3 ++- .../specs/2026-10-22-p38-forge-design.md | 26 +++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/crates/forge/conformance/FINDINGS.md b/crates/forge/conformance/FINDINGS.md index 30d010f1..a32ee07d 100644 --- a/crates/forge/conformance/FINDINGS.md +++ b/crates/forge/conformance/FINDINGS.md @@ -68,7 +68,8 @@ Each version passes its own fixtures (22/22). Checking the 1.22.6 fixtures again **H (statuses)** - The POST response key is `status`, not `state`. Any state string is accepted and stored (`bogus`, - empty). An unknown sha is 500 (1.22.6) or 404 (1.26.2). Combined state: success plus failure is + empty). A status POST to an unknown sha is 500 on both versions (the combined-status GET of an + unknown sha is 200 empty on 1.22.6 and 404 on 1.26.2). Combined state: success plus failure is `failure`; success plus pending is `pending`. No statuses: `state:""`, `sha:""` (1.22.6) or `state:"pending"` with the real `sha` (1.26.2). diff --git a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md index 0ad31aa6..d1b212e4 100644 --- a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md +++ b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md @@ -86,7 +86,8 @@ limits, but no forge. It does not host Git repos for others, and `core.hooksPath`, and the server keeps `refs/forge/pull/<n>/head` so unmerged PR commits survive branch deletion and gc. 7b. **Credentials are strictly separated by route.** Token routes accept a - user's password only (never a token) and only for that user; every other + user's password only (never a token) and only for that user (or a site admin + authenticating with their own password, which Gitea allows); every other route accepts a token only (a Basic password is never tried as a password). Scopes cannot be raised by a token; `public-only` tokens are accepted and denied every (private) repo. Repo identity on disk is an immutable id, so delete-and-recreate cannot alias diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index a85443a7..c13f21fb 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -371,9 +371,10 @@ not mistaken for one). "Latest" per context is the highest insertion id. Recorde facts: the POST response key is `status`; the combined endpoint lists only the latest per context (success plus failure is `failure`, success plus pending is `pending`); the history endpoints list everything. **Departures:** unknown state -strings answer 422 (Gitea stores any string); an unknown sha answers 404 (1.22.6 -answers 500, 1.26.2 404); a repo with no statuses answers `state: ""` as -1.22.6 does. +strings answer 422 (Gitea stores any string); a status POST to an unknown sha +answers 404 (both versions answer 500: an internal error is not a contract); the +combined status of an unknown sha is `200` with empty fields (1.22.6; 1.26.2 +answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. ### Repository lifecycle @@ -476,8 +477,9 @@ header. Decisions drawn from it, beyond those stated in the sections above: Pushing the head commit straight into base does not mark the PR merged, so there is no manual-merge detection. Approving your own PR is 422. Unknown review `event` values are stored as `PENDING`. -- **Protection.** Contents writes to a protected branch answer 403 (also for - admins; allowed with `new_branch`); force pushes and deletions of a protected +- **Protection.** Contents writes to a protected branch answer 403 when + `enable_push` is false (also for admins; allowed with `new_branch`, and + allowed when `enable_push` is true even if required contexts are unmet); force pushes and deletions of a protected branch are refused; force pushes to unprotected branches are allowed; a merge through a PR is allowed. Push refusal text: `Not allowed to push to protected branch <name>`. @@ -504,9 +506,17 @@ header. Decisions drawn from it, beyond those stated in the sections above: require the caller to be `{u}` or a password-authenticated site admin; client pushes limited to `refs/heads/*` and `refs/tags/*`; unknown status states are 422; repo rename is 422; `PATCH default_branch` to a missing branch is 422; a merged PR's head is frozen; - receive-pack on a missing repo is 404. Not departures, by the version rule: - unknown sha on a status POST is 404 (1.26.2); `public-only` is 403 (1.22.6); - the combined status of an unknown sha is `200` empty (1.22.6). + receive-pack on a missing repo is 404; a status POST to an unknown sha is + 404 (recorded 500 on both). The version rule also forces entries where 1.22.6 + recorded a 500, an empty message or a malformed body and 1.26.2 is followed + (for example `commits?sha=<unknown>` answers 404, a retried merge says `The PR + is already merged`). Not departures: `public-only` is 403 (1.22.6) and the + combined status of an unknown sha is `200` empty (1.22.6). + + **The gate.** sc-forge's CI gate is `fixtures/1.22.6` plus `departures.json`; + `fixtures/1.26.2` is reference data for the version rule, not a second gate. + The pre-receive refusal for a ref outside `refs/heads/*` and `refs/tags/*` reads + `refusing to update <ref>: only refs/heads/* and refs/tags/* are writable`. ## Open questions From 851e430c504293d354cce7abb20e64993910ff12 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 16:08:56 +0300 Subject: [PATCH 09/23] test(forge): stricter departures, identity-aware error text, settle failures departures.json now pins values (fields, $len, note values) instead of skipping, requires message_contains for every refusal, and rejects duplicate, unknown-scenario, unlabelled and unmatched entries; it covers the version-rule cases (500, empty message, malformed body). Error text compares id-shaped brackets only and keeps placeholder identity. settle_keys fails when the value does not settle; check --strict-first-read fails on a lagging first read. Fixtures unchanged. --- crates/forge/conformance/README.md | 73 +- crates/forge/conformance/departures.json | 1248 ++++++++++++++++------ crates/forge/conformance/run.py | 142 ++- 3 files changed, 1091 insertions(+), 372 deletions(-) diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md index c8bd25f7..ea1d79bd 100644 --- a/crates/forge/conformance/README.md +++ b/crates/forge/conformance/README.md @@ -60,9 +60,12 @@ observations called notes). Exchange N of the run is compared with exchange N of values are compared by type: `message` and `errors` (text), every `url`/`*_url` key (they carry the host), a repo `size`, and paths a call lists in `volatile=[...]`. - Error text: for every recorded exchange with status >= 400 whose body has `message` (or a non-empty - `errors`), the actual text must equal the recorded text after normalization (lower case, placeholders - removed, a trailing bracketed detail such as `[uid: 0, name: ]` removed). A failing exchange prints both - texts. `must_contain=[...]` is an additional check: each word must appear in the response message. + `errors`), the actual text must equal the recorded text after normalization: lower case, and only + id-shaped trailing details dropped (`[uid: 0, name: ]`, `[id: x, rel_path: ]`, numeric `id:`/`issue_id:` + pairs). Other brackets are kept, so `[name: alice]` and `[write:user]` vs `[read:user]` stay distinct. + Placeholders such as `<sha#3>` are kept and compared with the scenario's identity mapping, so a message + naming a different sha fails. A recorded `errors: []` requires the actual `errors` to be empty or absent. + A failing exchange prints both texts. `must_contain=[...]` is an additional check. - Text bodies (diffs, patches) are compared exactly unless the call marks `volatile=["$text"]`. - git commands: exit status (ok or not) and, for a failing step, the refusal text: the recorded `remote:`/`fatal:`/`error:`/`!` lines (normalized, without hosts and ids) must all appear in the actual @@ -70,31 +73,45 @@ observations called notes). Exchange N of the run is compared with exchange N of - Notes: recorded observations such as `merged_within_10s`. A note marked `strict=False` (timing, or a race kept for the record) is stored but never compared. - Repo fields Gitea updates asynchronously after a push (`empty`, `default_branch`) are read with - `settle_keys`: the call polls until three consecutive reads agree (up to 15 s) and records that value; - the first read is kept as a non-strict note. - -### Departures - -`departures.json` lists reviewed, intentional differences between sc-forge and the recorded Gitea -behaviour. Pass it with `check --departures departures.json`. Each entry is -`{scenario, exchange, label, expect, reason}`: - -- `exchange` is a fixture index, a list of indexes, a range `"a-b"`, or a git step name or note key. - Indexes are the same in `fixtures/1.22.6` and `fixtures/1.26.2` (their sequences are identical). -- `label` (single index only) must be contained in the fixture exchange's label, so an entry that points - at a moved exchange is reported as stale instead of silently covering the wrong one. -- `expect` replaces the strict comparison for that exchange: `status` (number or list), `message_contains`, - `ok` (git), `value` (note), `ignore_body` (status only), `ignore_fields` (compare strictly except these - keys), or `skip`. -- A matching exchange prints `expected difference honoured`; one that does not match the `expect` is a - failure (`unexpected`). An entry whose exchange no longer exists or whose label no longer matches - fails the run (`stale departure`). Do not pass departures when checking real Gitea. - -Departures that need a decision in sc-forge and could not be tied to one exchange are listed below. - -- Conflict merge: the departure covers the exchanges after the note `conflicting_pr_mergeable_after_8s` - in G and T. The merge of a PR whose head is already in base (`G#33`, `T#10`) also answers Gitea's - `405 Please try again later`; sc-forge may answer it differently and has no departure yet. + `settle_keys`: the call polls until 8 consecutive reads (4 s) agree, for at most 25 s, and records that + value; the first read is kept as a non-strict note. If the value does not settle in 25 s the exchange + **fails** (record mode raises). `check --strict-first-read` additionally fails when the first read + differs from the settled value (for a server that has no such lag, such as sc-forge). + +### Departures and the gate + +sc-forge's CI gate is `fixtures/1.22.6` plus `departures.json`. `fixtures/1.26.2` is reference only, for +the version rule: follow 1.22.6 unless it answers 500, an empty message or a malformed body, in which +case follow 1.26.2. So `departures.json` has no version field and must cover every exchange where +1.22.6 recorded one of those and sc-forge follows 1.26.2 (unknown sha on `commits?sha=`, merge retry after +success, ...), as well as every deliberate sc-forge difference. + +`departures.json` is a list of `{scenario, exchange, label, expect, reason}`. Pass it with +`check --departures departures.json` (never when checking real Gitea). + +- `exchange`: a fixture index, a list or range `"a-b"` (then `labels` is required, one per member), or a + git step name / note key. Indexes are identical in `fixtures/1.22.6` and `fixtures/1.26.2`. +- `label`: required for a single index; must be contained in the fixture exchange's label. +- `expect` keys: `status` (number or list), `message_contains`, `ok` (git), `value` (note; works for + `strict=False` notes too), `fields` (pin body values by dotted path, `$len` pins an array length), + `ignore_fields` (compare the recorded body strictly except these keys), `ignore_body` (compare only the + checks above) and `skip` (only when unavoidable; say why in `reason`). +- An entry with `fields` or `ignore_fields` and no `status` still compares the rest of the body strictly. +- Load errors (the run aborts): unknown scenario id, unknown `expect` key, missing `reason` or `label`, + a range or list without matching `labels`, two entries for one (scenario, index), and any entry that + expects a refusal (`status` >= 400 or `ok:false`) without `message_contains`, so a departure cannot hide + a wrong error message. +- Run-time failures: `stale departure` (the index is out of range or the label no longer matches), + `duplicate departure` (name-based entries that resolve to the same exchange) and `unexpected` (the actual + answer does not meet `expect`). A met entry prints `expected difference honoured`. +- The `message_contains` words for sc-forge's own error texts (merge style, state, rename, branch) are + placeholders: reword them when sc-forge's messages are fixed. + +Not covered by a departure: the merge of a PR whose head is already in base. sc-forge reproduces Gitea's +`405 "Please try again later"` with `changed_files: 0`, so the recorded exchanges apply unchanged. The +combined status for a sha with no statuses (1.22.6 `state:""`, 1.26.2 `pending`) and for an unknown sha +(1.22.6 `200` with empty fields, 1.26.2 `404`) are not 500/empty-message/malformed cases, so the rule gives +no departure; add one when sc-forge's answer is decided. ### Normalization diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json index 3197a1bb..6ed26104 100644 --- a/crates/forge/conformance/departures.json +++ b/crates/forge/conformance/departures.json @@ -1,331 +1,921 @@ [ - { - "scenario": "G", - "exchange": 39, - "expect": { - "status": 409, - "message_contains": [ - "conflict" - ] - }, - "reason": "sc-forge answers a conflicting merge with 409 and a conflict message instead of Gitea's 405 'Please try again later'", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge" - }, - { - "scenario": "T", - "exchange": 20, - "expect": { - "status": 409, - "message_contains": [ - "conflict" - ] - }, - "reason": "sc-forge answers a conflicting merge with 409 and a conflict message instead of Gitea's 405 'Please try again later'", - "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge" - }, - { - "scenario": "L", - "exchange": 2, - "expect": { - "ignore_fields": [ - "private" - ] - }, - "reason": "sc-forge keeps private:true when asked for private:false", - "label": "PATCH /api/v1/repos/acme/pub1" - }, - { - "scenario": "L", - "exchange": 5, - "expect": { - "ignore_fields": [ - "private" - ] - }, - "reason": "sc-forge keeps private:true when asked for private:false", - "label": "PATCH /api/v1/repos/acme/pub1" - }, - { - "scenario": "L", - "exchange": 3, - "expect": { - "ignore_fields": [ - "private" - ] - }, - "reason": "GET after PATCH private:false: sc-forge still reports private:true", - "label": "GET /api/v1/repos/acme/pub1" - }, - { - "scenario": "R", - "exchange": 6, - "expect": { - "status": [ - 401, - 403 - ] - }, - "reason": "sc-forge refuses an access token used as the Basic password on /users/{u}/tokens", - "label": "POST /api/v1/users/alice/tokens" - }, - { - "scenario": "R", - "exchange": 7, - "expect": { - "status": [ - 401, - 403 - ] - }, - "reason": "sc-forge refuses an access token used as the Basic password on /users/{u}/tokens", - "label": "GET /api/v1/users/alice/tokens" - }, - { - "scenario": "S", - "exchange": 0, - "expect": { - "ok": false - }, - "reason": "sc-forge accepts only refs/heads and refs/tags from a push", - "label": "bot-push-replace-ref" - }, - { - "scenario": "S", - "exchange": 7, - "expect": { - "ok": false - }, - "reason": "sc-forge accepts only refs/heads and refs/tags from a push", - "label": "bot-push-notes-ref" - }, - { - "scenario": "S", - "exchange": 9, - "expect": { - "ok": false - }, - "reason": "sc-forge accepts only refs/heads and refs/tags from a push", - "label": "bot-push-changes-ref" - }, - { - "scenario": "S", - "exchange": 10, - "expect": { - "ok": false - }, - "reason": "sc-forge accepts only refs/heads and refs/tags from a push", - "label": "bot-push-keep-around-ref" - }, - { - "scenario": "S", - "exchange": 11, - "expect": { - "ok": false - }, - "reason": "sc-forge accepts only refs/heads and refs/tags from a push", - "label": "bot-push-arbitrary-ref" - }, - { - "scenario": "S", - "exchange": 15, - "expect": { - "status": 200, - "ignore_body": true - }, - "reason": "the ref list is shorter because the extra refs were refused", - "label": "GET /api/v1/repos/acme/refs/git/refs" - }, - { - "scenario": "H", - "exchange": 33, - "expect": { - "status": 422 - }, - "reason": "sc-forge rejects the unknown status state 'bogus'", - "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>" - }, - { - "scenario": "H", - "exchange": 34, - "expect": { - "status": 422 - }, - "reason": "sc-forge rejects the unknown status state ''", - "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>" - }, - { - "scenario": "H", - "exchange": 43, - "expect": { - "status": 422 - }, - "reason": "sc-forge rejects the unknown status state 'bogus'", - "label": "POST /api/v1/repos/acme/status/statuses/<sha#7>" - }, - { - "scenario": "H", - "exchange": 35, - "expect": { - "status": 200, - "ignore_body": true - }, - "reason": "total_count counts the two states sc-forge refuses", - "label": "GET /api/v1/repos/acme/status/commits/<sha#4>/status?limit=50" - }, - { - "scenario": "H", - "exchange": "44-47", - "expect": { - "skip": true - }, - "reason": "commit whose only status was refused has no statuses in sc-forge" - }, - { - "scenario": "M", - "exchange": 42, - "expect": { - "status": 422 - }, - "reason": "sc-forge does not rename repos", - "label": "PATCH /api/v1/repos/acme/rename-me" - }, - { - "scenario": "M", - "exchange": "43-51", - "expect": { - "skip": true - }, - "reason": "everything after the rename depends on it having happened" - }, - { - "scenario": "N", - "exchange": 0, - "expect": { - "status": 422 - }, - "reason": "sc-forge rejects a default branch that does not exist", - "label": "PATCH /api/v1/repos/acme/dflt" - }, - { - "scenario": "G", - "exchange": 43, - "expect": { - "status": 422 - }, - "reason": "sc-forge supports only Do=merge, not squash", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge" - }, - { - "scenario": "G", - "exchange": "44-48", - "expect": { - "skip": true - }, - "reason": "reads that follow a squash merge assume it happened" - }, - { - "scenario": "G", - "exchange": 49, - "expect": { - "status": 422 - }, - "reason": "sc-forge supports only Do=merge, not rebase", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge" - }, - { - "scenario": "G", - "exchange": "50-54", - "expect": { - "skip": true - }, - "reason": "reads that follow a rebase merge assume it happened" - }, - { - "scenario": "G", - "exchange": 55, - "expect": { - "status": 422 - }, - "reason": "sc-forge supports only Do=merge, not rebase-merge", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge" - }, - { - "scenario": "G", - "exchange": "56-59", - "expect": { - "skip": true - }, - "reason": "reads that follow a rebase-merge merge assume it happened" - }, - { - "scenario": "G", - "exchange": 60, - "expect": { - "status": 422 - }, - "reason": "sc-forge supports only Do=merge, not fast-forward-only", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge" - }, - { - "scenario": "G", - "exchange": "61-65", - "expect": { - "skip": true - }, - "reason": "reads that follow a fast-forward-only merge assume it happened" - }, - { - "scenario": "G", - "exchange": 66, - "expect": { - "status": 422 - }, - "reason": "sc-forge supports only Do=merge, not fast-forward-only", - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge" - }, - { - "scenario": "O", - "exchange": 14, - "expect": { - "skip": true - }, - "reason": "sc-forge freezes head.sha at merge; Gitea follows a recreated branch", - "label": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>" - }, - { - "scenario": "O", - "exchange": 15, - "expect": { - "value": true - }, - "reason": "sc-forge freezes head.sha at merge", - "label": "merged_pr_head_sha_frozen" - }, - { - "scenario": "O", - "exchange": 16, - "expect": { - "value": false - }, - "reason": "sc-forge does not follow a recreated branch after merge", - "label": "merged_pr_head_sha_follows_new_branch" - }, - { - "scenario": "K", - "exchange": 29, - "expect": { - "status": 404 - }, - "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled', for a missing repo", - "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack" - }, - { - "scenario": "K", - "exchange": 39, - "expect": { - "status": 404 - }, - "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled', for a missing repo", - "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack" - } + { + "scenario": "G", + "exchange": 39, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", + "expect": { + "status": 409, + "message_contains": [ + "conflict" + ] + }, + "reason": "sc-forge answers a conflicting merge with 409 and a conflict message; Gitea answers 405 'Please try again later'" + }, + { + "scenario": "T", + "exchange": 20, + "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", + "expect": { + "status": 409, + "message_contains": [ + "conflict" + ] + }, + "reason": "sc-forge answers a conflicting merge with 409 and a conflict message; Gitea answers 405 'Please try again later'" + }, + { + "scenario": "G", + "exchange": 43, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", + "expect": { + "status": 422, + "message_contains": [ + "merge" + ] + }, + "reason": "sc-forge supports only Do=merge, not squash (reword message_contains once sc-forge's text is fixed)" + }, + { + "scenario": "G", + "exchange": 44, + "label": "squash_merged_immediately_after_merge_call", + "expect": { + "value": false + }, + "reason": "nothing was merged, squash is refused" + }, + { + "scenario": "G", + "exchange": 45, + "label": "squash_merged_within_10s", + "expect": { + "value": false + }, + "reason": "nothing was merged, squash is refused" + }, + { + "scenario": "G", + "exchange": 47, + "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", + "expect": { + "ignore_body": true, + "fields": { + "merged": false, + "state": "open" + } + }, + "reason": "the PR stays open because squash is refused (the recorded body is the merged PR)" + }, + { + "scenario": "G", + "exchange": 48, + "label": "squash_parent_count", + "expect": { + "value": -1 + }, + "reason": "no merge commit exists, squash is refused" + }, + { + "scenario": "G", + "exchange": 49, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", + "expect": { + "status": 422, + "message_contains": [ + "merge" + ] + }, + "reason": "sc-forge supports only Do=merge, not rebase (reword message_contains once sc-forge's text is fixed)" + }, + { + "scenario": "G", + "exchange": 50, + "label": "rebase_merged_immediately_after_merge_call", + "expect": { + "value": false + }, + "reason": "nothing was merged, rebase is refused" + }, + { + "scenario": "G", + "exchange": 51, + "label": "rebase_merged_within_10s", + "expect": { + "value": false + }, + "reason": "nothing was merged, rebase is refused" + }, + { + "scenario": "G", + "exchange": 53, + "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", + "expect": { + "ignore_body": true, + "fields": { + "merged": false, + "state": "open" + } + }, + "reason": "the PR stays open because rebase is refused (the recorded body is the merged PR)" + }, + { + "scenario": "G", + "exchange": 54, + "label": "rebase_parent_count", + "expect": { + "value": -1 + }, + "reason": "no merge commit exists, rebase is refused" + }, + { + "scenario": "G", + "exchange": 55, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", + "expect": { + "status": 422, + "message_contains": [ + "merge" + ] + }, + "reason": "sc-forge supports only Do=merge, not rebase-merge (reword message_contains once sc-forge's text is fixed)" + }, + { + "scenario": "G", + "exchange": 56, + "label": "rebase_merge_merged_immediately_after_merge_call", + "expect": { + "value": false + }, + "reason": "nothing was merged, rebase-merge is refused" + }, + { + "scenario": "G", + "exchange": 57, + "label": "rebase_merge_merged_within_10s", + "expect": { + "value": false + }, + "reason": "nothing was merged, rebase-merge is refused" + }, + { + "scenario": "G", + "exchange": 59, + "label": "rebase_merge_parent_count", + "expect": { + "value": -1 + }, + "reason": "no merge commit exists, rebase-merge is refused" + }, + { + "scenario": "G", + "exchange": 60, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", + "expect": { + "status": 422, + "message_contains": [ + "merge" + ] + }, + "reason": "sc-forge supports only Do=merge, not fast-forward-only (reword message_contains once sc-forge's text is fixed)" + }, + { + "scenario": "G", + "exchange": 61, + "label": "ff_only_merged_immediately_after_merge_call", + "expect": { + "value": false + }, + "reason": "nothing was merged, fast-forward-only is refused" + }, + { + "scenario": "G", + "exchange": 62, + "label": "ff_only_merged_within_10s", + "expect": { + "value": false + }, + "reason": "nothing was merged, fast-forward-only is refused" + }, + { + "scenario": "G", + "exchange": 64, + "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", + "expect": { + "ignore_body": true, + "fields": { + "merged": false, + "state": "open" + } + }, + "reason": "the PR stays open because fast-forward-only is refused (the recorded body is the merged PR)" + }, + { + "scenario": "G", + "exchange": 65, + "label": "ff_only_parent_count", + "expect": { + "value": -1 + }, + "reason": "no merge commit exists, fast-forward-only is refused" + }, + { + "scenario": "G", + "exchange": 66, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", + "expect": { + "status": 422, + "message_contains": [ + "merge" + ] + }, + "reason": "sc-forge supports only Do=merge, not fast-forward-only (reword message_contains once sc-forge's text is fixed)" + }, + { + "scenario": "G", + "exchange": 3, + "label": "merge_merged_immediately_after_merge_call", + "expect": { + "value": true + }, + "reason": "sc-forge merges synchronously: merged is true on the read right after the merge call" + }, + { + "scenario": "G", + "exchange": 13, + "label": "immediate_merge_status", + "expect": { + "value": 200 + }, + "reason": "sc-forge never answers 'checking': an immediate merge succeeds" + }, + { + "scenario": "G", + "exchange": 14, + "label": "immediate_merge_message", + "expect": { + "value": "" + }, + "reason": "no message on a successful merge" + }, + { + "scenario": "G", + "exchange": 15, + "label": "immediate_merged_immediately_after_merge_call", + "expect": { + "value": true + }, + "reason": "sc-forge merges synchronously: merged is true on the read right after the merge call" + }, + { + "scenario": "G", + "exchange": 20, + "label": "headid_merged_immediately_after_merge_call", + "expect": { + "value": true + }, + "reason": "sc-forge merges synchronously: merged is true on the read right after the merge call" + }, + { + "scenario": "G", + "exchange": 27, + "label": "wrongid_then_right_merged_immediately_after_merge_call", + "expect": { + "value": true + }, + "reason": "sc-forge merges synchronously: merged is true on the read right after the merge call" + }, + { + "scenario": "G", + "exchange": 73, + "label": "status_gated_merged_immediately_after_merge_call", + "expect": { + "value": true + }, + "reason": "sc-forge merges synchronously: merged is true on the read right after the merge call" + }, + { + "scenario": "T", + "exchange": 2, + "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>/merge", + "expect": { + "status": 409, + "message_contains": [ + "conflict", + "unrelated" + ] + }, + "reason": "sc-forge sends {\"message\":\"Merge conflict: unrelated histories\"}; Gitea sends a {Style,StdOut,StdErr,Err} body (1.26.2 truncates it)" + }, + { + "scenario": "H", + "exchange": 39, + "label": "POST /api/v1/repos/acme/status/statuses/<sha#5>", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "Gitea answers 500 for an unknown sha; sc-forge answers 404" + }, + { + "scenario": "H", + "exchange": 40, + "label": "POST /api/v1/repos/acme/status/statuses/nope", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "Gitea answers 500 for an unknown sha; sc-forge answers 404" + }, + { + "scenario": "S", + "exchange": 0, + "label": "bot-push-replace-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 1, + "label": "bot-push-pull-1-head", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 2, + "label": "bot-push-pull-1-head-forced", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 3, + "label": "bot-push-pull-999-head", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 7, + "label": "bot-push-notes-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 8, + "label": "bot-push-for-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 9, + "label": "bot-push-changes-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 10, + "label": "bot-push-keep-around-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 11, + "label": "bot-push-arbitrary-ref", + "expect": { + "ok": false, + "message_contains": [ + "only refs/heads/", + "refs/tags/" + ] + }, + "reason": "sc-forge's pre-receive refuses every ref outside refs/heads/* and refs/tags/*: 'refusing to update <ref>: only refs/heads/* and refs/tags/* are writable'" + }, + { + "scenario": "S", + "exchange": 15, + "label": "GET /api/v1/repos/acme/refs/git/refs", + "expect": { + "ignore_body": true, + "fields": { + "$len": 4 + } + }, + "reason": "the ref list holds only refs/heads and refs/tags in sc-forge (4 of 10 recorded refs); the elements differ with the refused refs" + }, + { + "scenario": "X", + "exchange": 31, + "label": "POST /api/v1/users/alice/tokens", + "expect": { + "status": 403, + "message_contains": [ + "scope", + "write:user" + ] + }, + "reason": "scope-error text differs by version; sc-forge names the scope" + }, + { + "scenario": "X", + "exchange": 33, + "label": "GET /api/v1/users/alice/tokens", + "expect": { + "status": 403, + "message_contains": [ + "scope", + "read:user" + ] + }, + "reason": "scope-error text differs by version; sc-forge names the scope" + }, + { + "scenario": "B", + "exchange": 17, + "label": "GET /api/v1/users/alice/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "R", + "exchange": 4, + "label": "POST /api/v1/users/alice/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "R", + "exchange": 5, + "label": "POST /api/v1/users/alice/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "R", + "exchange": 6, + "label": "POST /api/v1/users/alice/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "R", + "exchange": 7, + "label": "GET /api/v1/users/alice/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "X", + "exchange": 30, + "label": "POST /api/v1/users/bot/tokens", + "expect": { + "status": [ + 401, + 403 + ], + "message_contains": [ + "password" + ] + }, + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + }, + { + "scenario": "E", + "exchange": 19, + "label": "GET /api/v1/repos/acme/hist/commits?sha=nope&limit=50&stat=false&files=false&verification=false", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "1.22.6 answers 500; version rule follows 1.26.2 (404)" + }, + { + "scenario": "G", + "exchange": 12, + "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "expect": { + "status": 405, + "message_contains": [ + "already merged" + ] + }, + "reason": "1.22.6 answers an empty message; version rule follows 1.26.2 'The PR is already merged'" + }, + { + "scenario": "T", + "exchange": 16, + "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "expect": { + "status": 405, + "message_contains": [ + "already merged" + ] + }, + "reason": "1.22.6 answers an empty message; version rule follows 1.26.2 'The PR is already merged'" + }, + { + "scenario": "L", + "exchange": 2, + "label": "PATCH /api/v1/repos/acme/pub1", + "expect": { + "ignore_fields": [ + "private" + ], + "fields": { + "private": true + } + }, + "reason": "sc-forge keeps private:true; only `private` may differ" + }, + { + "scenario": "L", + "exchange": 5, + "label": "PATCH /api/v1/repos/acme/pub1", + "expect": { + "ignore_fields": [ + "private" + ], + "fields": { + "private": true + } + }, + "reason": "sc-forge keeps private:true; only `private` may differ" + }, + { + "scenario": "L", + "exchange": 3, + "label": "GET /api/v1/repos/acme/pub1", + "expect": { + "ignore_fields": [ + "private" + ], + "fields": { + "private": true + } + }, + "reason": "GET after PATCH private:false still reports private:true" + }, + { + "scenario": "H", + "exchange": 33, + "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>", + "expect": { + "status": 422, + "message_contains": [ + "state" + ] + }, + "reason": "sc-forge rejects the unknown status state 'bogus'" + }, + { + "scenario": "H", + "exchange": 34, + "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>", + "expect": { + "status": 422, + "message_contains": [ + "state" + ] + }, + "reason": "sc-forge rejects the unknown status state ''" + }, + { + "scenario": "H", + "exchange": 43, + "label": "POST /api/v1/repos/acme/status/statuses/<sha#7>", + "expect": { + "status": 422, + "message_contains": [ + "state" + ] + }, + "reason": "sc-forge rejects the unknown status state 'bogus'" + }, + { + "scenario": "H", + "exchange": 35, + "label": "GET /api/v1/repos/acme/status/commits/<sha#4>/status?limit=50", + "expect": { + "ignore_fields": [ + "total_count", + "statuses" + ] + }, + "reason": "total_count and the status list include the two states sc-forge refuses; the combined `state` is still compared" + }, + { + "scenario": "H", + "exchange": 44, + "label": "GET /api/v1/repos/acme/status/commits/<sha#7>/status?limit=50", + "expect": { + "status": 200, + "ignore_body": true, + "fields": { + "state": "pending", + "total_count": 0 + } + }, + "reason": "the only status on this commit was refused: no statuses, combined state pending (1.26.2 behaviour)" + }, + { + "scenario": "H", + "exchange": 45, + "label": "combined_state_only_bogus", + "expect": { + "value": "pending" + }, + "reason": "no statuses: combined state pending (1.26.2 behaviour)" + }, + { + "scenario": "H", + "exchange": 46, + "label": "combined_total_only_bogus", + "expect": { + "value": 0 + }, + "reason": "the bogus status was refused, so total_count is 0" + }, + { + "scenario": "H", + "exchange": 47, + "label": "GET /api/v1/repos/acme/status/statuses/<sha#7>?limit=100", + "expect": { + "status": 200, + "ignore_body": true, + "fields": { + "$len": 0 + } + }, + "reason": "the status list is empty because the bogus state was refused" + }, + { + "scenario": "M", + "exchange": 42, + "label": "PATCH /api/v1/repos/acme/rename-me", + "expect": { + "status": 422, + "message_contains": [ + "rename" + ] + }, + "reason": "sc-forge does not rename repos" + }, + { + "scenario": "M", + "exchange": 43, + "label": "GET /api/v1/repos/acme/rename-me", + "expect": { + "status": 200, + "ignore_body": true, + "fields": { + "name": "rename-me" + } + }, + "reason": "the old name still resolves (no rename)" + }, + { + "scenario": "M", + "exchange": 44, + "label": "GET /api/v1/repos/acme/renamed", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "the new name does not exist" + }, + { + "scenario": "M", + "exchange": 45, + "label": "GET /api/v1/repos/acme/rename-me", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "no access, no redirect: 404 as for any private repo" + }, + { + "scenario": "M", + "exchange": 46, + "label": "GET /acme/rename-me.git/info/refs?service=git-upload-pack", + "expect": { + "status": 200, + "ignore_body": true + }, + "reason": "info/refs of the old name works directly (no redirect)" + }, + { + "scenario": "M", + "exchange": 48, + "label": "ls-remote-new-name", + "expect": { + "ok": false, + "message_contains": [ + "not found" + ] + }, + "reason": "the new name does not exist" + }, + { + "scenario": "M", + "exchange": 49, + "label": "PATCH /api/v1/repos/acme/renamed", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "the new name does not exist" + }, + { + "scenario": "M", + "exchange": 50, + "label": "PATCH /api/v1/repos/acme/renamed", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "the new name does not exist" + }, + { + "scenario": "M", + "exchange": 51, + "label": "PATCH /api/v1/repos/acme/Renamed", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "the new name does not exist" + }, + { + "scenario": "N", + "exchange": 0, + "label": "PATCH /api/v1/repos/acme/dflt", + "expect": { + "status": 422, + "message_contains": [ + "branch" + ] + }, + "reason": "sc-forge rejects a default branch that does not exist" + }, + { + "scenario": "O", + "exchange": 14, + "label": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>", + "expect": { + "ignore_fields": [ + "head.sha" + ] + }, + "reason": "head.sha is the frozen merge-time sha in sc-forge; the notes below pin that" + }, + { + "scenario": "O", + "exchange": 15, + "label": "merged_pr_head_sha_frozen", + "expect": { + "value": true + }, + "reason": "sc-forge freezes head.sha at merge" + }, + { + "scenario": "O", + "exchange": 16, + "label": "merged_pr_head_sha_follows_new_branch", + "expect": { + "value": false + }, + "reason": "sc-forge does not follow a recreated branch after merge" + }, + { + "scenario": "K", + "exchange": 29, + "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled'" + }, + { + "scenario": "K", + "exchange": 39, + "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack", + "expect": { + "status": 404, + "message_contains": [ + "not found" + ] + }, + "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled'" + } ] \ No newline at end of file diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py index d199c15d..e820d937 100644 --- a/crates/forge/conformance/run.py +++ b/crates/forge/conformance/run.py @@ -161,13 +161,26 @@ def msg_text(ex): return ex.get("body_text") or ex.get("output") or "" +TRAIL_STRIP = (re.compile(r"\s*\[uid: [^\]]*\]\s*$"), re.compile(r"\s*\[id: [^\]]*rel_path: [^\]]*\]\s*$")) +ID_PAIRS = re.compile(r"\b(?:id|issue_id|head_repo_id|base_repo_id): \d+,?\s*") + + def norm_msg(t): - """Compare error text without ids, hosts or trailing `[uid: 0, name: ]` detail.""" - t = re.sub(r"<[^<>]*>", "", (t or "").lower()) - t = re.sub(r"\s*\[[^\]]*\]\s*$", "", t) + """Error text for comparison: lower case, trailing `[uid: .., name: ..]` and `[id: .., rel_path: ..]` details + and numeric `id:` pairs dropped. Other brackets stay: `[name: alice]` and `[write:user]` are meaningful. + Placeholders such as `<sha#3>` stay too, so eq_str can check which value a message names.""" + t = (t or "").lower() + for r in TRAIL_STRIP: + t = r.sub("", t) + t = ID_PAIRS.sub("", t) return re.sub(r"\s+", " ", t).strip(" .:\n") +def msg_equal(exp_text, act_text, bij): + tmp = [] + return eq_str(norm_msg(exp_text), norm_msg(act_text), bij, tmp, "") + + def err_text(v): if isinstance(v, str): return v @@ -227,11 +240,22 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): if key not in exp["body"]: continue ev = err_text(exp["body"][key]) - if key == "errors" and not ev: - continue av = err_text(ab.get(key)) if ab is not None else (msg_text(act) if key == "message" else "") - if norm_msg(ev) != norm_msg(av): + if key == "errors": + if exp["body"][key] is None: + continue + if exp["body"][key] == [] and av: + d.append(("fail", f"errors expected empty, got {av!r}")) + continue + if not ev: + continue + if not msg_equal(ev, av, bij): d.append(("fail", f"{key} {ev!r} expected, got {av!r}")) + if act.get("unsettled"): + d.append(("fail", "repo state did not settle (8 equal reads) within 25 s")) + if act.get("first_read_differs"): + d.append(("fail", f"first read {act['first_read_differs']['first']} differs from the settled " + f"{act['first_read_differs']['settled']} (--strict-first-read)")) for h, v in exp.get("headers", {}).items(): got = act.get("headers", {}).get(h) if got is None: @@ -273,8 +297,70 @@ def dep_indexes(spec, expected): return [i for i, e in enumerate(expected) if e.get("name") == spec or e.get("key") == spec] +EXPECT_KEYS = {"status", "message_contains", "ok", "value", "fields", "ignore_fields", "ignore_body", "skip"} + + +def load_departures(path, scenario_ids): + """Read and validate departures.json; any problem is a load error (SystemExit).""" + deps = J.load(open(path)) + seen, errs = {}, [] + if not isinstance(deps, list): + raise SystemExit(f"{path}: expected a JSON list") + for n, d in enumerate(deps): + where = f"{path}[{n}]" + if d.get("scenario") not in scenario_ids: + errs.append(f"{where}: unknown scenario {d.get('scenario')!r}") + continue + e = d.get("expect") + if not isinstance(e, dict) or not e: + errs.append(f"{where}: expect must be a non-empty object") + continue + if set(e) - EXPECT_KEYS: + errs.append(f"{where}: unknown expect keys {sorted(set(e) - EXPECT_KEYS)}") + if not d.get("reason"): + errs.append(f"{where}: reason is required") + sts = e.get("status") + sts = sts if isinstance(sts, list) else ([sts] if sts is not None else []) + if (any(x >= 400 for x in sts) or e.get("ok") is False) and not e.get("message_contains"): + errs.append(f"{where}: an expected refusal (status >= 400 or git ok:false) needs message_contains") + spec = d.get("exchange") + idx = None + if isinstance(spec, int) and not isinstance(spec, bool): + idx = [spec] + if not d.get("label"): + errs.append(f"{where}: a single-index entry needs a label") + elif isinstance(spec, (list, str)) and (isinstance(spec, list) or re.fullmatch(r"\d+-\d+", spec)): + idx = dep_indexes(spec, []) + if len(d.get("labels") or []) != len(idx): + errs.append(f"{where}: a range or list needs `labels` with one entry per exchange ({len(idx)})") + elif not isinstance(spec, str): + errs.append(f"{where}: bad exchange {spec!r}") + for i in idx or []: + if (d["scenario"], i) in seen: + errs.append(f"{where}: duplicate entry for {d['scenario']}#{i} (also {seen[(d['scenario'], i)]})") + seen[(d["scenario"], i)] = where + if errs: + raise SystemExit("departures.json is invalid:\n " + "\n ".join(errs)) + return deps + + +def dget(b, path): + for part in path.split("."): + if isinstance(b, list): + b = b[int(part)] if part.isdigit() and int(part) < len(b) else None + elif isinstance(b, dict): + b = b.get(part) + else: + return None + return b + + def apply_override(exp, act, ov, bij): - """Check `act` against a departure instead of the recorded exchange.""" + """Check `act` against a departure instead of the recorded exchange. + + Targeted checks (status, message_contains, ok, value, fields) always run. The recorded body is still compared + strictly when the entry only names `ignore_fields`/`fields` (those keys are left out), so a departure never + widens more than it says.""" e, why, d = ov["expect"], ov.get("reason", ""), [] if e.get("skip"): return [("honoured", f"skipped: {why}")] @@ -287,7 +373,7 @@ def apply_override(exp, act, ov, bij): txt = act["output"].lower() for w in e.get("message_contains", []): if w.lower() not in txt: - d.append(("fail", f"unexpected: output lacks {w!r}")) + d.append(("fail", f"unexpected: output lacks {w!r}: {txt[-160:]!r}")) else: sts = e.get("status") sts = sts if isinstance(sts, list) else ([sts] if sts is not None else None) @@ -297,8 +383,15 @@ def apply_override(exp, act, ov, bij): for w in e.get("message_contains", []): if w.lower() not in txt: d.append(("fail", f"unexpected: message lacks {w!r}: {txt[:160]!r}")) - if not e.get("ignore_body") and e.get("ignore_fields") and sts is None: - d += [x for x in cmp_exchange(exp, act, bij, extra_volatile=e["ignore_fields"]) if x[0] == "fail"] + for k, v in (e.get("fields") or {}).items(): + body = act.get("body") + got = len(body) if k == "$len" and isinstance(body, list) else dget(body, k) + if got != v: + d.append(("fail", f"unexpected: {k} {v!r} expected, got {got!r}")) + pins = list((e.get("fields") or {})) + if not e.get("ignore_body") and sts is None and (e.get("ignore_fields") or pins): + skip = list(e.get("ignore_fields") or []) + [k for k in pins if k != "$len"] + d += [x for x in cmp_exchange(exp, act, bij, extra_volatile=skip) if x[0] == "fail"] return d or [("honoured", why)] @@ -331,6 +424,7 @@ def __init__(self, base, admin_token, mode): self.verbose = False self.base_ready = False self.first_read = None + self.strict_first_read = False r = self.call("GET", "/user", rec=False) if r.status != 200 or not r.json: raise SystemExit(f"admin token rejected by {self.base}: {r.status} {r.text[:200]}") @@ -462,6 +556,7 @@ def send(): if not retry_while or time.time() >= deadline or not any(w in r.text.lower() for w in retry_while): break time.sleep(1) + unsettled, first_differs = False, None if settle_keys and r.status == 200 and r.is_json: # Gitea updates some repo fields (empty, default_branch) asynchronously after a push: record the # value that is stable on 8 consecutive reads (4 s, <= 25 s); the first read is left in `first_read` @@ -474,10 +569,14 @@ def get(b, k): hist = [proj(r)] self.first_read = dict(zip(settle_keys, hist[0])) end = time.time() + 25 - while time.time() < end and not (len(hist) >= 8 and all(h == hist[-1] for h in hist[-8:])): + stable = lambda: len(hist) >= 8 and all(h == hist[-1] for h in hist[-8:]) # noqa: E731 + while time.time() < end and not stable(): time.sleep(0.5) r = send() hist.append(proj(r)) + unsettled = not stable() + if self.strict_first_read and hist[0] != hist[-1]: + first_differs = {"first": dict(zip(settle_keys, hist[0])), "settled": dict(zip(settle_keys, hist[-1]))} if rec: ex = {"kind": "http", "method": method, "path": self.np(full), "auth": as_, "status": r.status} @@ -495,7 +594,13 @@ def get(b, k): for k, v in (("must_contain", must_contain), ("volatile", volatile)): if v: ex[k] = list(v) + if unsettled: + ex["unsettled"] = True + if first_differs: + ex["first_read_differs"] = first_differs self.push_ex(ex) + if unsettled and self.mode == "record": + raise SetupError(f"{method} {full}: value did not settle within 25 s") if expect is not None: ok = expect if isinstance(expect, (list, tuple, set)) else [expect] if r.status not in ok: @@ -664,12 +769,16 @@ def run_all(c, only, out=None, fixtures=None, departures=()): bad = [i for i in idx if not 0 <= i < len(c.expected)] if not idx or bad: stale.append(f"stale departure {dep['exchange']!r}: no such exchange in {fname} ({dep.get('reason', '')})") - for i in idx: + labels = dep.get("labels") or ([dep["label"]] if dep.get("label") and len(idx) == 1 else [None] * len(idx)) + for k, i in enumerate(idx): if i in bad: continue - if dep.get("label") and dep["label"] not in ex_label(c.expected[i]) and len(idx) == 1: + if labels[k] and labels[k] not in ex_label(c.expected[i]): stale.append(f"stale departure #{i}: fixture exchange is {ex_label(c.expected[i])!r}, " - f"departure says {dep['label']!r}") + f"departure says {labels[k]!r}") + continue + if i in c.overrides: + stale.append(f"duplicate departure for #{i} ({dep.get('reason', '')})") continue c.overrides[i] = dep t0 = time.time() @@ -719,8 +828,9 @@ def run_all(c, only, out=None, fixtures=None, departures=()): def cmd_run(a): - deps = J.load(open(a.departures)) if getattr(a, "departures", None) else [] + deps = load_departures(a.departures, {x[0] for x in SCENARIOS}) if getattr(a, "departures", None) else [] c = Ctx(a.base_url, a.admin_token, a.cmd) + c.strict_first_read = getattr(a, "strict_first_read", False) c.verbose = a.verbose only = set(a.only.split(",")) if a.only else None t0 = time.time() @@ -821,6 +931,8 @@ def main(): else: p.add_argument("--fixtures", required=True) p.add_argument("--departures", help="JSON list of reviewed differences from the recorded behaviour") + p.add_argument("--strict-first-read", action="store_true", + help="fail when the first read of an async repo field differs from the settled value") p = sub.add_parser("diff") p.add_argument("a") p.add_argument("b") From 976577f683161c7b7ef64466b20c66cded0a2f13 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 16:20:48 +0300 Subject: [PATCH 10/23] docs(forge): address bot review findings (CGI env, export, admin bootstrap, PR ref lifecycle, tar.gz, field lists) --- crates/forge/conformance/FINDINGS.md | 5 ++- ...058-sc-forge-gitea-compatible-git-forge.md | 5 ++- .../specs/2026-10-22-p38-forge-design.md | 43 ++++++++++++++----- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/crates/forge/conformance/FINDINGS.md b/crates/forge/conformance/FINDINGS.md index a32ee07d..febb8ddd 100644 --- a/crates/forge/conformance/FINDINGS.md +++ b/crates/forge/conformance/FINDINGS.md @@ -40,7 +40,7 @@ Each version passes its own fixtures (22/22). Checking the 1.22.6 fixtures again **A to D (meta, users, repos, empty repo)** - No `WWW-Authenticate` on API 401s. `PATCH /admin/users/{u}` is 200. Token create returns - `{id,name,sha1,token_last_eight,scopes}` (1.26.2 adds `created_at`). + `{id,name,sha1,token_last_eight,scopes}` (1.26.2 adds `created_at` and `last_used_at`). - Scope enforcement is 403: a token with `read:user,read:organization,write:repository` cannot `POST /user/repos` (needs `write:user`) and cannot touch issue comments (needs `read:issue` or `write:issue`). @@ -128,7 +128,8 @@ Each version passes its own fixtures (22/22). Checking the 1.22.6 fixtures again | Repo object | has `parent` and `repo_transfer` (null), `default_allow_maintainer_edit:false` | omits both, `default_allow_maintainer_edit:true` | | PR object | `assignees`, `requested_reviewers` null; list items include `additions/deletions/changed_files` | arrays; list items omit those three | | Email in comments and statuses | `bot@noreply.localhost` | `3+bot@noreply.localhost` | -| Token and branch-protection objects | no `created_at`, no `priority` | adds `created_at` and `priority` | +| Token objects | `id,name,scopes,sha1,token_last_eight` | adds `created_at`, `last_used_at` | +| Branch-protection objects | already has `created_at`, `updated_at`, `rule_name` | adds `priority`, `enable_force_push`, `enable_force_push_allowlist`, `force_push_allowlist_{usernames,teams,deploy_keys}`, `block_admin_merge_override` | | Empty repo `GET contents` | `200 []` | 404 | | `GET commits?sha=nope` | 500 | 404 with body `null` | | `PUT contents` without sha | `422 [SHA]: Required` | `422 repository file already exists` | diff --git a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md index d1b212e4..5f54655d 100644 --- a/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md +++ b/docs/adr/0058-sc-forge-gitea-compatible-git-forge.md @@ -44,7 +44,8 @@ limits, but no forge. It does not host Git repos for others, and texts, status codes, merge outcome strings), the forge reproduces it. 3. **Scope is what clients call.** No Actions, webhooks, issues, wiki, LFS, OAuth apps or UI. Commit statuses are posted by the client's own runner; - branch protection supports `enable_push` and `status_check_contexts` only. + branch protection supports `enable_push`, `enable_status_check` and + `status_check_contexts` only. No SSH in v1 (follow-on: OpenSSH `AuthorizedKeysCommand`). No squash or rebase merge: every client sends `Do: merge` and no UI exists for a human to choose; other values answer 422. Same-repo pull requests only. @@ -94,7 +95,7 @@ limits, but no forge. It does not host Git repos for others, and a running process. 8. **Token format and storage.** Tokens are 40 hex characters (the length Gitea issues), stored as BLAKE3 hashes, compared in constant time, with - optional expiry and scopes (`all`, `read|write:{repository,user, + optional expiry and scopes (`all`, `public-only`, `read|write:{repository,user, organization,admin,issue}`). Basic auth with a password is accepted on the token-management routes only; git and the API accept a token as the Basic password under any username. Repo access is site admin, org owner, repo diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index c13f21fb..398befcc 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -74,7 +74,8 @@ recorded fixtures, not here. - `GET /repos/search`, `/branches`, `/git/refs/heads[/{b}]` (an array), `/commits` (`X-Total-Count`, paging), `/git/commits/{sha}` (+`.diff`), `/git/trees/{sha}?recursive=true`, `GET|POST|PUT /contents/{path}`, - `GET /archive/{ref}.zip`. + `GET /archive/{ref}.zip` and `.tar.gz` (the portal reads zip; the recorded + scenario also checks tar.gz, which `git archive --format=tar.gz` serves). **Tier 4, protection** - `POST|GET|PATCH|DELETE /branch_protections` (`branch_name`, `enable_push`, @@ -116,8 +117,11 @@ token generation, and the constant-time compare move into `crates/crypto`** (RustCrypto stays quarantined there; the existing `random_hex` is the RNG entry point). `gix` is not used. rustls stays in `tlsio` and TLS is deferred. `CLAUDE.md`'s dependency rule gains one sentence in the F1 PR: -`forge → {crypto, core}`. The crate is `#![cfg(unix)]` with a stub `main` so the -Windows workspace check still compiles. +`forge → {crypto, core}`. The crate has a library target +(`scl_forge`, the whole implementation, `#![cfg(unix)]` at its root) and a thin +binary target whose `main` is `#[cfg(unix)]` with a `#[cfg(not(unix))]` stub that +prints "sc-forge is unix-only" and exits 2, so the Windows workspace check still +compiles and `cargo test --workspace` skips the library's tests there. New direct dependencies: @@ -157,8 +161,12 @@ sha, context, state, description, target_url, id AUTOINCREMENT), `branch_protections` (repo, branch, enable_push, enable_status_check, status_check_contexts JSON), `mergeability_cache` (repo, base_sha, head_sha → mergeable, changed_files), a per-repo index counter. Numbered SQL migrations run -at `serve` startup only; `admin` commands refuse when the schema differs from -their binary's, and `serve` never caches users or tokens across requests. +by `serve` at startup and by `admin` **only when the database does not exist yet +or is at schema version 0** (first-run bootstrap on an empty data directory, the +documented `admin user create` then `serve` sequence); on an existing database +`admin` refuses when the schema version differs from its binary's, and an older +`serve` refuses a newer schema. `serve` never caches users or tokens across +requests, so an `admin` change is visible immediately. ### Authentication @@ -215,7 +223,15 @@ Routes: `GET /{o}/{r}.git/info/refs?service=…`, `POST …/git-upload-pack`, `POST …/git-receive-pack`. The server authenticates and authorizes (read for upload-pack, write for receive-pack), resolves the repo id from the database, and runs **`git http-backend`** as a CGI with `GIT_PROJECT_ROOT=<data>/repos/<id>.git` -and `PATH_INFO` set to the service suffix. This keeps Git's own advertisement +and `PATH_INFO` set to the service suffix. The CGI environment is built +explicitly (the process environment is cleared): `GIT_PROJECT_ROOT`, +`GIT_HTTP_EXPORT_ALL=1` (set only after authentication, so no +`git-daemon-export-ok` marker is needed and an unexported repo cannot leak), +`PATH_INFO`, `REQUEST_METHOD`, `QUERY_STRING`, `CONTENT_TYPE`, `CONTENT_LENGTH` +(or chunked input), `HTTP_CONTENT_ENCODING`, `HTTP_GIT_PROTOCOL` from the client's +`Git-Protocol` header when it matches `version=[0-9]+(:…)?`, `REMOTE_USER` (the +authenticated login, set only after the write check), `REMOTE_ADDR`, plus the +scrubbed variables below. This keeps Git's own advertisement preamble, content types, no-cache headers, `Content-Encoding: gzip` request handling and protocol v2 correct without re-implementation (verified: git 2.54 serves an advertisement from a bare repo with the root set to the repo itself, @@ -254,10 +270,15 @@ line (`Status:` and headers), then the body is streamed. a request starts (the hook re-reads protection at ref-update time under one read transaction). A revocation or a new rule affects requests that start after it commits; an in-flight push is not cancelled. Documented, not coordinated. -- **PR retention:** the server keeps `refs/forge/pull/<n>/head` for every PR, - set at creation and refreshed by `post-receive` when the head branch moves, - and the pre-receive hook records the head into that ref before allowing a - deletion of a head branch. With `gc.auto=0`, no unreachable PR commit is +- **PR retention:** the server keeps `refs/forge/pull/<n>/head` for every PR. + It is created **before** the PR row is inserted (so a crash leaves at worst an + orphan ref, never a PR whose head can be pruned), refreshed by `post-receive` + **only while the PR is open**, frozen when the PR is closed or merged (the final + head is written in the same step that records `head_sha_at_merge` or the close), + and the pre-receive hook records the head into it before allowing a deletion of + an open PR's head branch. A startup reconciler removes `refs/forge/pull/<n>/*` + refs with no PR row and recreates a missing ref for an open PR from its stored + head branch. With `gc.auto=0`, no unreachable PR commit is pruned; maintenance gc (F5) runs with a long `--prune` window under the repo lock. - **Admission control** before any git process: global and per-repo limits on @@ -285,7 +306,7 @@ Minimum `git` 2.40 in tests; the container pins a current release `--end-of-options` precedes revisions; `--` precedes paths only, and paths are treated as literals with NUL-delimited output (`-z`). Output is size-capped. - **Reads:** `for-each-ref`, `rev-parse`, `log`/`rev-list` with a fixed `-z` - format, `cat-file`, `ls-tree -r -z`, `diff-tree`, `archive --format=zip`. + format, `cat-file`, `ls-tree -r -z`, `diff-tree`, `archive --format=zip|tar.gz`. - **Contents write** (POST/PUT): validate the path (reject empty, `.`, `..`, `.git` and its NTFS/HFS aliases, absolute paths; mode 100644 only), `hash-object -w`, a temp `GIT_INDEX_FILE` (`read-tree`, `update-index --cacheinfo`, From d19200fb61e1a55e06021dd3f31edfa52e0af924 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 16:44:40 +0300 Subject: [PATCH 11/23] test(forge): per-principal clones, check-mode expect, team and password departures, archive and secret scans Git clones are cached per principal. expect= only aborts in record mode. Scenario B's team calls are recorded and tagged; teams and Basic-password-on-ordinary-route exchanges get departures. Departures carry kind and match and are verified against the produced exchange. Archives are parsed and compared by entry name, size and hash; ls-remote --symref stdout is a strict note. record scans the fixtures for credential-shaped values; error texts, command lines and timeouts are scrubbed. --only runs every scenario and filters the report; diff exits 1 on differences. Fixtures re-recorded. --- crates/forge/conformance/README.md | 37 +- crates/forge/conformance/departures.json | 344 ++++++++++++++---- .../fixtures/1.22.6/B-users-orgs-tokens.json | 70 +++- .../conformance/fixtures/1.22.6/C-repos.json | 48 +-- .../fixtures/1.22.6/D-empty-repo.json | 2 +- .../fixtures/1.22.6/E-history-reads.json | 94 ++++- .../conformance/fixtures/1.22.6/F-pulls.json | 142 ++++---- .../conformance/fixtures/1.22.6/G-merge.json | 78 ++-- .../fixtures/1.22.6/H-statuses.json | 22 +- .../fixtures/1.22.6/I-branch-protection.json | 2 +- .../fixtures/1.22.6/J-smart-http.json | 80 ++-- .../fixtures/1.22.6/K-visibility-probing.json | 68 ++-- .../fixtures/1.22.6/L-force-private.json | 20 +- .../conformance/fixtures/1.22.6/M-names.json | 38 +- .../fixtures/1.22.6/N-default-branch.json | 54 ++- .../fixtures/1.22.6/O-pr-head-lifecycle.json | 68 ++-- .../fixtures/1.22.6/P-pagination.json | 230 ++++++------ .../fixtures/1.22.6/R-token-scope-edges.json | 10 +- .../fixtures/1.22.6/S-ref-pushes.json | 12 +- .../fixtures/1.22.6/T-merge-outcomes.json | 60 +-- .../fixtures/1.22.6/U-status-check-edges.json | 4 +- .../fixtures/1.22.6/V-smart-http-bytes.json | 6 +- .../fixtures/1.22.6/X-auth-forms.json | 19 +- .../conformance/fixtures/1.26.2/A-meta.json | 4 +- .../fixtures/1.26.2/B-users-orgs-tokens.json | 74 +++- .../conformance/fixtures/1.26.2/C-repos.json | 56 +-- .../fixtures/1.26.2/D-empty-repo.json | 10 +- .../fixtures/1.26.2/E-history-reads.json | 102 +++++- .../conformance/fixtures/1.26.2/F-pulls.json | 88 ++--- .../conformance/fixtures/1.26.2/G-merge.json | 92 ++--- .../fixtures/1.26.2/H-statuses.json | 26 +- .../fixtures/1.26.2/I-branch-protection.json | 10 +- .../fixtures/1.26.2/J-smart-http.json | 80 ++-- .../fixtures/1.26.2/K-visibility-probing.json | 84 ++--- .../fixtures/1.26.2/L-force-private.json | 28 +- .../conformance/fixtures/1.26.2/M-names.json | 36 +- .../fixtures/1.26.2/N-default-branch.json | 54 ++- .../fixtures/1.26.2/O-pr-head-lifecycle.json | 56 +-- .../fixtures/1.26.2/P-pagination.json | 226 ++++++------ .../fixtures/1.26.2/R-token-scope-edges.json | 14 +- .../fixtures/1.26.2/S-ref-pushes.json | 8 +- .../fixtures/1.26.2/T-merge-outcomes.json | 56 +-- .../fixtures/1.26.2/U-status-check-edges.json | 4 +- .../fixtures/1.26.2/V-smart-http-bytes.json | 6 +- .../fixtures/1.26.2/X-auth-forms.json | 19 +- crates/forge/conformance/run.py | 202 +++++++--- 46 files changed, 1759 insertions(+), 1084 deletions(-) diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md index ea1d79bd..80032b23 100644 --- a/crates/forge/conformance/README.md +++ b/crates/forge/conformance/README.md @@ -29,11 +29,18 @@ actions disabled, and `OFFLINE_MODE=true`. The admin user is `siteadmin` because A full record run needs a **fresh** server: scenarios create `alice`, `bot`, `carol`, `dave`, the org `acme` and repos such as `alpha` and `hist`. The images must already be pulled. +## Fixture hygiene + +`record` ends with a scan of the written files and fails on URL user-info (`://user:pw@`), auth headers, +raw 40-hex ids and any known token or password. Scenario error texts, git command lines and timeouts are +scrubbed before they are stored; git clones are cached per principal, so a collaborator's push never runs +with the admin's credentials. + ## Check any server ```sh python3 -I run.py check --base-url http://127.0.0.1:3000 --admin-token "$TOKEN" --fixtures fixtures/1.26.2/ -python3 -I run.py check ... --only F,G -v # a subset, verbose (see the note below) +python3 -I run.py check ... --only F,G -v # report only F and G (all scenarios still run) python3 -I run.py diff fixtures/1.22.6 fixtures/1.26.2 # offline version diff python3 -I run.py show fixtures/1.26.2 --only G --body # what was recorded ``` @@ -42,10 +49,9 @@ python3 -I run.py show fixtures/1.26.2 --only G --body # what was recorded admin token has all scopes, the ability to create users through `POST /admin/users` and tokens through `POST /users/{u}/tokens` with Basic auth, and git smart HTTP on the same base URL. -`--only` skips the other scenarios, but a few facts are set by earlier ones (for example scenario B makes -`alice` a private user, which shows in the owner object of her repos), and `search` or listing calls see -every repo created so far. Compare a subset only against fixtures recorded the same way; the reference -run is the full ordered one. +`--only A,F` still **runs every scenario**, in order, because later scenarios read state created by earlier +ones (users, orgs, repos, `search` results); it only filters what is reported (check) or written (record). +An unknown id exits with status 2. `run.py diff` exits 1 when the two fixture sets differ. ### What is compared @@ -67,9 +73,12 @@ observations called notes). Exchange N of the run is compared with exchange N of naming a different sha fails. A recorded `errors: []` requires the actual `errors` to be empty or absent. A failing exchange prints both texts. `must_contain=[...]` is an additional check. - Text bodies (diffs, patches) are compared exactly unless the call marks `volatile=["$text"]`. +- Archives (`binary=True` calls answered 200): the zip or tar.gz is parsed and its entries are compared by + normalized name, size and SHA-256 of the content, so a server that only sends the 4-byte signature fails. - git commands: exit status (ok or not) and, for a failing step, the refusal text: the recorded `remote:`/`fatal:`/`error:`/`!` lines (normalized, without hosts and ids) must all appear in the actual output, so a push refused for another reason fails. `must_contain` words are checked too. +- `ls-remote --symref` steps record their normalized stdout as a strict note (`<step>_stdout`). - Notes: recorded observations such as `merged_within_10s`. A note marked `strict=False` (timing, or a race kept for the record) is stored but never compared. - Repo fields Gitea updates asynchronously after a push (`empty`, `default_branch`) are read with @@ -89,21 +98,31 @@ success, ...), as well as every deliberate sc-forge difference. `departures.json` is a list of `{scenario, exchange, label, expect, reason}`. Pass it with `check --departures departures.json` (never when checking real Gitea). -- `exchange`: a fixture index, a list or range `"a-b"` (then `labels` is required, one per member), or a +- `kind` (`http`, `git`, `note`) and `match` identify the exchange: `METHOD /path/template` as recorded + (placeholders included), the git step name, or the note key. `match` is required for a single index. + `exchange` is a fixture index, a list or range `"a-b"` (then `matches` is required, one per member), or a git step name / note key. Indexes are identical in `fixtures/1.22.6` and `fixtures/1.26.2`. -- `label`: required for a single index; must be contained in the fixture exchange's label. +- The identity is enforced twice: a fixture exchange that no longer matches is a `stale departure`, and an + override is refused (`applied to a different exchange`) when the exchange actually produced differs, + including for `skip`. - `expect` keys: `status` (number or list), `message_contains`, `ok` (git), `value` (note; works for `strict=False` notes too), `fields` (pin body values by dotted path, `$len` pins an array length), `ignore_fields` (compare the recorded body strictly except these keys), `ignore_body` (compare only the checks above) and `skip` (only when unavoidable; say why in `reason`). - An entry with `fields` or `ignore_fields` and no `status` still compares the rest of the body strictly. -- Load errors (the run aborts): unknown scenario id, unknown `expect` key, missing `reason` or `label`, - a range or list without matching `labels`, two entries for one (scenario, index), and any entry that +- Load errors (the run aborts): unknown scenario id, unknown `expect` key, missing `reason`, `kind` or `match`, + a range or list without matching `matches`, two entries for one (scenario, index), and any entry that expects a refusal (`status` >= 400 or `ok:false`) without `message_contains`, so a departure cannot hide a wrong error message. - Run-time failures: `stale departure` (the index is out of range or the label no longer matches), `duplicate departure` (name-based entries that resolve to the same exchange) and `unexpected` (the actual answer does not meet `expect`). A met entry prints `expected difference honoured`. +- `message_contains` is enforced on refusals (actual status >= 400); `fields` on successful bodies. +- Scenario `expect=` assertions guard preconditions and only run in `record` mode (and for unrecorded setup + calls). In `check` mode a recorded exchange that answers differently is a diff, never an abort. +- Teams (scenario B: create team, add member, carol's org permission) are tagged `team` and covered by + departures because sc-forge has no teams. Basic-**password** auth on an ordinary API route (scenarios B, + R, X) is covered by departures too: sc-forge accepts a password only on `/users/{u}/tokens*`. - The `message_contains` words for sc-forge's own error texts (merge style, state, rename, branch) are placeholders: reword them when sc-forge's messages are fixed. diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json index 6ed26104..02898b94 100644 --- a/crates/forge/conformance/departures.json +++ b/crates/forge/conformance/departures.json @@ -2,7 +2,8 @@ { "scenario": "G", "exchange": 39, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", "expect": { "status": 409, "message_contains": [ @@ -14,7 +15,8 @@ { "scenario": "T", "exchange": 20, - "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", "expect": { "status": 409, "message_contains": [ @@ -26,7 +28,8 @@ { "scenario": "G", "exchange": 43, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", "expect": { "status": 422, "message_contains": [ @@ -38,7 +41,8 @@ { "scenario": "G", "exchange": 44, - "label": "squash_merged_immediately_after_merge_call", + "kind": "note", + "match": "squash_merged_immediately_after_merge_call", "expect": { "value": false }, @@ -47,7 +51,8 @@ { "scenario": "G", "exchange": 45, - "label": "squash_merged_within_10s", + "kind": "note", + "match": "squash_merged_within_10s", "expect": { "value": false }, @@ -56,7 +61,8 @@ { "scenario": "G", "exchange": 47, - "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", + "kind": "http", + "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", "expect": { "ignore_body": true, "fields": { @@ -69,7 +75,8 @@ { "scenario": "G", "exchange": 48, - "label": "squash_parent_count", + "kind": "note", + "match": "squash_parent_count", "expect": { "value": -1 }, @@ -78,7 +85,8 @@ { "scenario": "G", "exchange": 49, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", "expect": { "status": 422, "message_contains": [ @@ -90,7 +98,8 @@ { "scenario": "G", "exchange": 50, - "label": "rebase_merged_immediately_after_merge_call", + "kind": "note", + "match": "rebase_merged_immediately_after_merge_call", "expect": { "value": false }, @@ -99,7 +108,8 @@ { "scenario": "G", "exchange": 51, - "label": "rebase_merged_within_10s", + "kind": "note", + "match": "rebase_merged_within_10s", "expect": { "value": false }, @@ -108,7 +118,8 @@ { "scenario": "G", "exchange": 53, - "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", + "kind": "http", + "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", "expect": { "ignore_body": true, "fields": { @@ -121,7 +132,8 @@ { "scenario": "G", "exchange": 54, - "label": "rebase_parent_count", + "kind": "note", + "match": "rebase_parent_count", "expect": { "value": -1 }, @@ -130,7 +142,8 @@ { "scenario": "G", "exchange": 55, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", "expect": { "status": 422, "message_contains": [ @@ -142,7 +155,8 @@ { "scenario": "G", "exchange": 56, - "label": "rebase_merge_merged_immediately_after_merge_call", + "kind": "note", + "match": "rebase_merge_merged_immediately_after_merge_call", "expect": { "value": false }, @@ -151,7 +165,8 @@ { "scenario": "G", "exchange": 57, - "label": "rebase_merge_merged_within_10s", + "kind": "note", + "match": "rebase_merge_merged_within_10s", "expect": { "value": false }, @@ -160,7 +175,8 @@ { "scenario": "G", "exchange": 59, - "label": "rebase_merge_parent_count", + "kind": "note", + "match": "rebase_merge_parent_count", "expect": { "value": -1 }, @@ -169,7 +185,8 @@ { "scenario": "G", "exchange": 60, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", "expect": { "status": 422, "message_contains": [ @@ -181,7 +198,8 @@ { "scenario": "G", "exchange": 61, - "label": "ff_only_merged_immediately_after_merge_call", + "kind": "note", + "match": "ff_only_merged_immediately_after_merge_call", "expect": { "value": false }, @@ -190,7 +208,8 @@ { "scenario": "G", "exchange": 62, - "label": "ff_only_merged_within_10s", + "kind": "note", + "match": "ff_only_merged_within_10s", "expect": { "value": false }, @@ -199,7 +218,8 @@ { "scenario": "G", "exchange": 64, - "label": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", + "kind": "http", + "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", "expect": { "ignore_body": true, "fields": { @@ -212,7 +232,8 @@ { "scenario": "G", "exchange": 65, - "label": "ff_only_parent_count", + "kind": "note", + "match": "ff_only_parent_count", "expect": { "value": -1 }, @@ -221,7 +242,8 @@ { "scenario": "G", "exchange": 66, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", "expect": { "status": 422, "message_contains": [ @@ -233,7 +255,8 @@ { "scenario": "G", "exchange": 3, - "label": "merge_merged_immediately_after_merge_call", + "kind": "note", + "match": "merge_merged_immediately_after_merge_call", "expect": { "value": true }, @@ -242,7 +265,8 @@ { "scenario": "G", "exchange": 13, - "label": "immediate_merge_status", + "kind": "note", + "match": "immediate_merge_status", "expect": { "value": 200 }, @@ -251,7 +275,8 @@ { "scenario": "G", "exchange": 14, - "label": "immediate_merge_message", + "kind": "note", + "match": "immediate_merge_message", "expect": { "value": "" }, @@ -260,7 +285,8 @@ { "scenario": "G", "exchange": 15, - "label": "immediate_merged_immediately_after_merge_call", + "kind": "note", + "match": "immediate_merged_immediately_after_merge_call", "expect": { "value": true }, @@ -269,7 +295,8 @@ { "scenario": "G", "exchange": 20, - "label": "headid_merged_immediately_after_merge_call", + "kind": "note", + "match": "headid_merged_immediately_after_merge_call", "expect": { "value": true }, @@ -278,7 +305,8 @@ { "scenario": "G", "exchange": 27, - "label": "wrongid_then_right_merged_immediately_after_merge_call", + "kind": "note", + "match": "wrongid_then_right_merged_immediately_after_merge_call", "expect": { "value": true }, @@ -287,7 +315,8 @@ { "scenario": "G", "exchange": 73, - "label": "status_gated_merged_immediately_after_merge_call", + "kind": "note", + "match": "status_gated_merged_immediately_after_merge_call", "expect": { "value": true }, @@ -296,7 +325,8 @@ { "scenario": "T", "exchange": 2, - "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#1>/merge", "expect": { "status": 409, "message_contains": [ @@ -309,7 +339,8 @@ { "scenario": "H", "exchange": 39, - "label": "POST /api/v1/repos/acme/status/statuses/<sha#5>", + "kind": "http", + "match": "POST /api/v1/repos/acme/status/statuses/<sha#5>", "expect": { "status": 404, "message_contains": [ @@ -321,7 +352,8 @@ { "scenario": "H", "exchange": 40, - "label": "POST /api/v1/repos/acme/status/statuses/nope", + "kind": "http", + "match": "POST /api/v1/repos/acme/status/statuses/nope", "expect": { "status": 404, "message_contains": [ @@ -333,7 +365,8 @@ { "scenario": "S", "exchange": 0, - "label": "bot-push-replace-ref", + "kind": "git", + "match": "bot-push-replace-ref", "expect": { "ok": false, "message_contains": [ @@ -346,7 +379,8 @@ { "scenario": "S", "exchange": 1, - "label": "bot-push-pull-1-head", + "kind": "git", + "match": "bot-push-pull-1-head", "expect": { "ok": false, "message_contains": [ @@ -359,7 +393,8 @@ { "scenario": "S", "exchange": 2, - "label": "bot-push-pull-1-head-forced", + "kind": "git", + "match": "bot-push-pull-1-head-forced", "expect": { "ok": false, "message_contains": [ @@ -372,7 +407,8 @@ { "scenario": "S", "exchange": 3, - "label": "bot-push-pull-999-head", + "kind": "git", + "match": "bot-push-pull-999-head", "expect": { "ok": false, "message_contains": [ @@ -385,7 +421,8 @@ { "scenario": "S", "exchange": 7, - "label": "bot-push-notes-ref", + "kind": "git", + "match": "bot-push-notes-ref", "expect": { "ok": false, "message_contains": [ @@ -398,7 +435,8 @@ { "scenario": "S", "exchange": 8, - "label": "bot-push-for-ref", + "kind": "git", + "match": "bot-push-for-ref", "expect": { "ok": false, "message_contains": [ @@ -411,7 +449,8 @@ { "scenario": "S", "exchange": 9, - "label": "bot-push-changes-ref", + "kind": "git", + "match": "bot-push-changes-ref", "expect": { "ok": false, "message_contains": [ @@ -424,7 +463,8 @@ { "scenario": "S", "exchange": 10, - "label": "bot-push-keep-around-ref", + "kind": "git", + "match": "bot-push-keep-around-ref", "expect": { "ok": false, "message_contains": [ @@ -437,7 +477,8 @@ { "scenario": "S", "exchange": 11, - "label": "bot-push-arbitrary-ref", + "kind": "git", + "match": "bot-push-arbitrary-ref", "expect": { "ok": false, "message_contains": [ @@ -450,7 +491,8 @@ { "scenario": "S", "exchange": 15, - "label": "GET /api/v1/repos/acme/refs/git/refs", + "kind": "http", + "match": "GET /api/v1/repos/acme/refs/git/refs", "expect": { "ignore_body": true, "fields": { @@ -462,7 +504,8 @@ { "scenario": "X", "exchange": 31, - "label": "POST /api/v1/users/alice/tokens", + "kind": "http", + "match": "POST /api/v1/users/alice/tokens", "expect": { "status": 403, "message_contains": [ @@ -475,7 +518,8 @@ { "scenario": "X", "exchange": 33, - "label": "GET /api/v1/users/alice/tokens", + "kind": "http", + "match": "GET /api/v1/users/alice/tokens", "expect": { "status": 403, "message_contains": [ @@ -487,8 +531,9 @@ }, { "scenario": "B", - "exchange": 17, - "label": "GET /api/v1/users/alice/tokens", + "exchange": 19, + "kind": "http", + "match": "GET /api/v1/users/alice/tokens", "expect": { "status": [ 401, @@ -503,7 +548,8 @@ { "scenario": "R", "exchange": 4, - "label": "POST /api/v1/users/alice/tokens", + "kind": "http", + "match": "POST /api/v1/users/alice/tokens", "expect": { "status": [ 401, @@ -518,7 +564,8 @@ { "scenario": "R", "exchange": 5, - "label": "POST /api/v1/users/alice/tokens", + "kind": "http", + "match": "POST /api/v1/users/alice/tokens", "expect": { "status": [ 401, @@ -533,7 +580,8 @@ { "scenario": "R", "exchange": 6, - "label": "POST /api/v1/users/alice/tokens", + "kind": "http", + "match": "POST /api/v1/users/alice/tokens", "expect": { "status": [ 401, @@ -548,7 +596,8 @@ { "scenario": "R", "exchange": 7, - "label": "GET /api/v1/users/alice/tokens", + "kind": "http", + "match": "GET /api/v1/users/alice/tokens", "expect": { "status": [ 401, @@ -563,7 +612,8 @@ { "scenario": "X", "exchange": 30, - "label": "POST /api/v1/users/bot/tokens", + "kind": "http", + "match": "POST /api/v1/users/bot/tokens", "expect": { "status": [ 401, @@ -578,7 +628,8 @@ { "scenario": "E", "exchange": 19, - "label": "GET /api/v1/repos/acme/hist/commits?sha=nope&limit=50&stat=false&files=false&verification=false", + "kind": "http", + "match": "GET /api/v1/repos/acme/hist/commits?sha=nope&limit=50&stat=false&files=false&verification=false", "expect": { "status": 404, "message_contains": [ @@ -590,7 +641,8 @@ { "scenario": "G", "exchange": 12, - "label": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#1>/merge", "expect": { "status": 405, "message_contains": [ @@ -602,7 +654,8 @@ { "scenario": "T", "exchange": 16, - "label": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", + "kind": "http", + "match": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#4>/merge", "expect": { "status": 405, "message_contains": [ @@ -614,7 +667,8 @@ { "scenario": "L", "exchange": 2, - "label": "PATCH /api/v1/repos/acme/pub1", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/pub1", "expect": { "ignore_fields": [ "private" @@ -628,7 +682,8 @@ { "scenario": "L", "exchange": 5, - "label": "PATCH /api/v1/repos/acme/pub1", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/pub1", "expect": { "ignore_fields": [ "private" @@ -642,7 +697,8 @@ { "scenario": "L", "exchange": 3, - "label": "GET /api/v1/repos/acme/pub1", + "kind": "http", + "match": "GET /api/v1/repos/acme/pub1", "expect": { "ignore_fields": [ "private" @@ -656,7 +712,8 @@ { "scenario": "H", "exchange": 33, - "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>", + "kind": "http", + "match": "POST /api/v1/repos/acme/status/statuses/<sha#4>", "expect": { "status": 422, "message_contains": [ @@ -668,7 +725,8 @@ { "scenario": "H", "exchange": 34, - "label": "POST /api/v1/repos/acme/status/statuses/<sha#4>", + "kind": "http", + "match": "POST /api/v1/repos/acme/status/statuses/<sha#4>", "expect": { "status": 422, "message_contains": [ @@ -680,7 +738,8 @@ { "scenario": "H", "exchange": 43, - "label": "POST /api/v1/repos/acme/status/statuses/<sha#7>", + "kind": "http", + "match": "POST /api/v1/repos/acme/status/statuses/<sha#7>", "expect": { "status": 422, "message_contains": [ @@ -692,7 +751,8 @@ { "scenario": "H", "exchange": 35, - "label": "GET /api/v1/repos/acme/status/commits/<sha#4>/status?limit=50", + "kind": "http", + "match": "GET /api/v1/repos/acme/status/commits/<sha#4>/status?limit=50", "expect": { "ignore_fields": [ "total_count", @@ -704,7 +764,8 @@ { "scenario": "H", "exchange": 44, - "label": "GET /api/v1/repos/acme/status/commits/<sha#7>/status?limit=50", + "kind": "http", + "match": "GET /api/v1/repos/acme/status/commits/<sha#7>/status?limit=50", "expect": { "status": 200, "ignore_body": true, @@ -718,7 +779,8 @@ { "scenario": "H", "exchange": 45, - "label": "combined_state_only_bogus", + "kind": "note", + "match": "combined_state_only_bogus", "expect": { "value": "pending" }, @@ -727,7 +789,8 @@ { "scenario": "H", "exchange": 46, - "label": "combined_total_only_bogus", + "kind": "note", + "match": "combined_total_only_bogus", "expect": { "value": 0 }, @@ -736,7 +799,8 @@ { "scenario": "H", "exchange": 47, - "label": "GET /api/v1/repos/acme/status/statuses/<sha#7>?limit=100", + "kind": "http", + "match": "GET /api/v1/repos/acme/status/statuses/<sha#7>?limit=100", "expect": { "status": 200, "ignore_body": true, @@ -749,7 +813,8 @@ { "scenario": "M", "exchange": 42, - "label": "PATCH /api/v1/repos/acme/rename-me", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/rename-me", "expect": { "status": 422, "message_contains": [ @@ -761,7 +826,8 @@ { "scenario": "M", "exchange": 43, - "label": "GET /api/v1/repos/acme/rename-me", + "kind": "http", + "match": "GET /api/v1/repos/acme/rename-me", "expect": { "status": 200, "ignore_body": true, @@ -774,7 +840,8 @@ { "scenario": "M", "exchange": 44, - "label": "GET /api/v1/repos/acme/renamed", + "kind": "http", + "match": "GET /api/v1/repos/acme/renamed", "expect": { "status": 404, "message_contains": [ @@ -786,7 +853,8 @@ { "scenario": "M", "exchange": 45, - "label": "GET /api/v1/repos/acme/rename-me", + "kind": "http", + "match": "GET /api/v1/repos/acme/rename-me", "expect": { "status": 404, "message_contains": [ @@ -798,7 +866,8 @@ { "scenario": "M", "exchange": 46, - "label": "GET /acme/rename-me.git/info/refs?service=git-upload-pack", + "kind": "http", + "match": "GET /acme/rename-me.git/info/refs?service=git-upload-pack", "expect": { "status": 200, "ignore_body": true @@ -808,7 +877,8 @@ { "scenario": "M", "exchange": 48, - "label": "ls-remote-new-name", + "kind": "git", + "match": "ls-remote-new-name", "expect": { "ok": false, "message_contains": [ @@ -820,7 +890,8 @@ { "scenario": "M", "exchange": 49, - "label": "PATCH /api/v1/repos/acme/renamed", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/renamed", "expect": { "status": 404, "message_contains": [ @@ -832,7 +903,8 @@ { "scenario": "M", "exchange": 50, - "label": "PATCH /api/v1/repos/acme/renamed", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/renamed", "expect": { "status": 404, "message_contains": [ @@ -844,7 +916,8 @@ { "scenario": "M", "exchange": 51, - "label": "PATCH /api/v1/repos/acme/Renamed", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/Renamed", "expect": { "status": 404, "message_contains": [ @@ -856,7 +929,8 @@ { "scenario": "N", "exchange": 0, - "label": "PATCH /api/v1/repos/acme/dflt", + "kind": "http", + "match": "PATCH /api/v1/repos/acme/dflt", "expect": { "status": 422, "message_contains": [ @@ -868,7 +942,8 @@ { "scenario": "O", "exchange": 14, - "label": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>", + "kind": "http", + "match": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>", "expect": { "ignore_fields": [ "head.sha" @@ -879,7 +954,8 @@ { "scenario": "O", "exchange": 15, - "label": "merged_pr_head_sha_frozen", + "kind": "note", + "match": "merged_pr_head_sha_frozen", "expect": { "value": true }, @@ -888,7 +964,8 @@ { "scenario": "O", "exchange": 16, - "label": "merged_pr_head_sha_follows_new_branch", + "kind": "note", + "match": "merged_pr_head_sha_follows_new_branch", "expect": { "value": false }, @@ -897,7 +974,8 @@ { "scenario": "K", "exchange": 29, - "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack", + "kind": "http", + "match": "GET /acme/ghost.git/info/refs?service=git-receive-pack", "expect": { "status": 404, "message_contains": [ @@ -909,7 +987,8 @@ { "scenario": "K", "exchange": 39, - "label": "GET /acme/ghost.git/info/refs?service=git-receive-pack", + "kind": "http", + "match": "GET /acme/ghost.git/info/refs?service=git-receive-pack", "expect": { "status": 404, "message_contains": [ @@ -917,5 +996,110 @@ ] }, "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled'" + }, + { + "scenario": "B", + "exchange": 13, + "kind": "http", + "match": "POST /api/v1/orgs/acme/teams", + "expect": { + "status": [ + 404, + 405, + 501 + ], + "message_contains": [ + "not" + ] + }, + "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + }, + { + "scenario": "B", + "exchange": 14, + "kind": "http", + "match": "PUT /api/v1/teams/<id:path:teams#1>/members/carol", + "expect": { + "status": [ + 404, + 405, + 501 + ], + "message_contains": [ + "not" + ] + }, + "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + }, + { + "scenario": "B", + "exchange": 15, + "kind": "http", + "match": "GET /api/v1/users/carol/orgs/acme/permissions", + "expect": { + "status": [ + 200, + 404 + ], + "message_contains": [ + "not found" + ], + "fields": { + "can_read": false + } + }, + "reason": "carol is not a team member without teams: no read permission via the org (200 all false or 404). teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + }, + { + "scenario": "X", + "exchange": 18, + "kind": "http", + "match": "GET /api/v1/user", + "expect": { + "status": 401, + "message_contains": [ + "auth" + ] + }, + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + }, + { + "scenario": "X", + "exchange": 19, + "kind": "http", + "match": "GET /api/v1/repos/acme/authrepo", + "expect": { + "status": 401, + "message_contains": [ + "auth" + ] + }, + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + }, + { + "scenario": "X", + "exchange": 20, + "kind": "http", + "match": "POST /api/v1/repos/acme/authrepo/statuses/<sha#1>", + "expect": { + "status": 401, + "message_contains": [ + "auth" + ] + }, + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + }, + { + "scenario": "X", + "exchange": 27, + "kind": "http", + "match": "GET /api/v1/user", + "expect": { + "status": 401, + "message_contains": [ + "auth" + ] + }, + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" } ] \ No newline at end of file diff --git a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json index 9b4f76e2..4a4439df 100644 --- a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json @@ -337,6 +337,69 @@ "url": "<base>/api/swagger" } }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/teams", + "auth": "admin", + "status": 201, + "request": { + "name": "devs", + "permission": "read", + "includes_all_repositories": false, + "units": [ + "repo.code", + "repo.pulls" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "devs", + "description": "", + "organization": { + "id": "<id:organization.id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + }, + "includes_all_repositories": false, + "permission": "read", + "units": [ + "repo.code", + "repo.pulls" + ], + "units_map": { + "repo.code": "read", + "repo.pulls": "read" + }, + "can_create_org_repo": false + }, + "tags": [ + "team" + ] + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/teams/<id:path:teams#1>/members/carol", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "", + "tags": [ + "team" + ] + }, { "kind": "http", "method": "GET", @@ -352,7 +415,10 @@ "can_write": false, "can_read": true, "can_create_repository": false - } + }, + "tags": [ + "team" + ] }, { "kind": "http", @@ -608,7 +674,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/C-repos.json b/crates/forge/conformance/fixtures/1.22.6/C-repos.json index 55943019..2e58f331 100644 --- a/crates/forge/conformance/fixtures/1.22.6/C-repos.json +++ b/crates/forge/conformance/fixtures/1.22.6/C-repos.json @@ -61,7 +61,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -193,7 +193,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -295,7 +295,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -397,7 +397,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -517,7 +517,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -622,7 +622,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -727,7 +727,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -925,7 +925,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1109,7 +1109,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1217,7 +1217,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1543,7 +1543,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1645,7 +1645,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1747,7 +1747,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1853,7 +1853,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1952,14 +1952,14 @@ { "kind": "git", "name": "push-write-scoped-token", - "cmd": "git push http://bot:<token>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", "ok": true, "output": "remote: \nremote: Create a new pull request for 'bot-scoped-branch': \nremote: <base>/acme/alpha/compare/main...bot-scoped-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-scoped-branch" }, { "kind": "git", "name": "push-readonly-scope", - "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", "ok": false, "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403", "refusal": [ @@ -1970,7 +1970,7 @@ { "kind": "git", "name": "push-read-collab", - "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", "ok": false, "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'", "refusal": [ @@ -1982,7 +1982,7 @@ { "kind": "git", "name": "push-no-grant", - "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", "refusal": [ @@ -1993,7 +1993,7 @@ { "kind": "git", "name": "clone-no-grant", - "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", + "cmd": "git clone http://<creds>@<host>/acme/alpha.git <tmp>/dave-clone", "ok": false, "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", "refusal": [ @@ -2004,7 +2004,7 @@ { "kind": "git", "name": "clone-read-collab", - "cmd": "git clone http://carol:<token>@<host>/acme/alpha.git <tmp>/carol-clone", + "cmd": "git clone http://<creds>@<host>/acme/alpha.git <tmp>/carol-clone", "ok": true, "output": "Cloning into '<tmp>/carol-clone'..." }, @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2210,7 +2210,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json index 35d26005..d7641cd5 100644 --- a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json index fb6c4d5a..43984075 100644 --- a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2176,7 +2176,44 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" }, - "body_prefix_hex": "504b0304" + "body_prefix_hex": "504b0304", + "archive": [ + { + "name": "hist/", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 15, + "sha256": "f817eb30fc16a9f8613f4afcc0894740f77be6e89f88c99380305a89069a272f" + }, + { + "name": "hist/docs/", + "size": 0, + "sha256": null + }, + { + "name": "hist/docs/guide.md", + "size": 6, + "sha256": "90c390ec1de806bf945885cd0af51e90c3cd8cda0d0ff676051a56c20848c90f" + }, + { + "name": "hist/new.txt", + "size": 4, + "sha256": "7aa7a5359173d05b63cfd682e3c38487f3cb4f7f1d60659fe59fab1505977d4c" + }, + { + "name": "hist/src/", + "size": 0, + "sha256": null + }, + { + "name": "hist/src/lib.rs", + "size": 13, + "sha256": "536e506bb90914c243a12b397b9a998f85ae2cbd9ba02dfd03a9e155ca5ca0f4" + } + ] }, { "kind": "http", @@ -2188,7 +2225,44 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" }, - "body_prefix_hex": "1f8b0800" + "body_prefix_hex": "1f8b0800", + "archive": [ + { + "name": "hist", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 15, + "sha256": "f817eb30fc16a9f8613f4afcc0894740f77be6e89f88c99380305a89069a272f" + }, + { + "name": "hist/docs", + "size": 0, + "sha256": null + }, + { + "name": "hist/docs/guide.md", + "size": 6, + "sha256": "90c390ec1de806bf945885cd0af51e90c3cd8cda0d0ff676051a56c20848c90f" + }, + { + "name": "hist/new.txt", + "size": 4, + "sha256": "7aa7a5359173d05b63cfd682e3c38487f3cb4f7f1d60659fe59fab1505977d4c" + }, + { + "name": "hist/src", + "size": 0, + "sha256": null + }, + { + "name": "hist/src/lib.rs", + "size": 13, + "sha256": "536e506bb90914c243a12b397b9a998f85ae2cbd9ba02dfd03a9e155ca5ca0f4" + } + ] }, { "kind": "http", @@ -2200,7 +2274,19 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#4>.tar.gz?rev=<sha#4>>; rel=\"immutable\"" }, - "body_prefix_hex": "504b0304" + "body_prefix_hex": "504b0304", + "archive": [ + { + "name": "hist/", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 7, + "sha256": "f61fd51ed8a1210100bca867c775464457dd5a21dd2368bfed695de3a2ca80e1" + } + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json index 186f92c1..fa778790 100644 --- a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json @@ -118,7 +118,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -216,7 +216,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -407,13 +407,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -505,13 +505,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -755,13 +755,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -853,13 +853,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1011,13 +1011,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1109,13 +1109,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1289,13 +1289,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1387,13 +1387,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1545,13 +1545,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1643,13 +1643,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1824,13 +1824,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1922,13 +1922,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2073,7 +2073,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2126,7 +2126,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2224,7 +2224,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2350,7 +2350,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2403,7 +2403,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2501,7 +2501,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2606,7 +2606,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2659,7 +2659,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2757,7 +2757,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3051,7 +3051,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3098,13 +3098,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3196,13 +3196,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3322,7 +3322,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3369,13 +3369,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3467,13 +3467,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3592,7 +3592,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3639,13 +3639,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3737,13 +3737,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3864,7 +3864,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3911,13 +3911,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4009,13 +4009,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 26, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4139,7 +4139,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4193,7 +4193,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4247,7 +4247,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4301,7 +4301,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4373,7 +4373,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4425,7 +4425,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4465,7 +4465,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4505,7 +4505,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4545,7 +4545,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4598,7 +4598,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4638,7 +4638,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4678,7 +4678,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4718,7 +4718,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4769,7 +4769,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4855,7 +4855,7 @@ }, "body": { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { @@ -4904,7 +4904,7 @@ "body": [ { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { diff --git a/crates/forge/conformance/fixtures/1.22.6/G-merge.json b/crates/forge/conformance/fixtures/1.22.6/G-merge.json index 5d7f7741..47a50959 100644 --- a/crates/forge/conformance/fixtures/1.22.6/G-merge.json +++ b/crates/forge/conformance/fixtures/1.22.6/G-merge.json @@ -74,7 +74,7 @@ "html_url": "<base>/acme/merges/pulls/1", "diff_url": "<base>/acme/merges/pulls/1.diff", "patch_url": "<base>/acme/merges/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -121,13 +121,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -219,13 +219,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -444,13 +444,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -542,13 +542,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -743,7 +743,7 @@ "html_url": "<base>/acme/merges/pulls/2", "diff_url": "<base>/acme/merges/pulls/2.diff", "patch_url": "<base>/acme/merges/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#4>", @@ -820,7 +820,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -918,7 +918,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1153,7 +1153,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1251,7 +1251,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1485,7 +1485,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1583,7 +1583,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1771,7 +1771,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1869,7 +1869,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2045,7 +2045,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2143,7 +2143,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2329,7 +2329,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2427,7 +2427,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2615,7 +2615,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2713,7 +2713,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2899,7 +2899,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2997,7 +2997,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3142,7 +3142,7 @@ "html_url": "<base>/acme/merges/pulls/11", "diff_url": "<base>/acme/merges/pulls/11.diff", "patch_url": "<base>/acme/merges/pulls/11.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#15>", @@ -3219,7 +3219,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3317,7 +3317,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3468,7 +3468,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3539,13 +3539,13 @@ "template": false, "parent": null, "mirror": false, - "size": 39, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3637,13 +3637,13 @@ "template": false, "parent": null, "mirror": false, - "size": 39, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3830,7 +3830,7 @@ "html_url": "<base>/acme/merges/pulls/14", "diff_url": "<base>/acme/merges/pulls/14.diff", "patch_url": "<base>/acme/merges/pulls/14.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#19>", @@ -3907,7 +3907,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4005,7 +4005,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4196,7 +4196,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4294,7 +4294,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json index efaa743f..a29180e5 100644 --- a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json @@ -190,13 +190,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/status/languages", "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -862,7 +862,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1101,7 +1101,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1375,7 +1375,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1684,7 +1684,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1942,7 +1942,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2742,7 +2742,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3166,7 +3166,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3392,7 +3392,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json index 561bbe5d..8c39d949 100644 --- a/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.22.6/I-branch-protection.json @@ -221,7 +221,7 @@ { "kind": "git", "name": "push-protected-admin", - "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", + "cmd": "git push http://<creds>@<host>/acme/prot.git HEAD:refs/heads/main", "ok": false, "output": "remote: \nremote: Gitea: Not allowed to push to protected branch main \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", "refusal": [ diff --git a/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json index 8f39cc71..246349ff 100644 --- a/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.22.6/J-smart-http.json @@ -6,133 +6,133 @@ { "kind": "git", "name": "clone-admin-token", - "cmd": "git clone -q http://<admin>:<token>@<host>/acme/smart.git <tmp>/j-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-admin-token", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-admin-token': \nremote: <base>/acme/smart/compare/main...j-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-admin-token" }, { "kind": "git", "name": "fetch-admin-token", - "cmd": "git fetch -q http://<admin>:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-oauth2-token", - "cmd": "git clone -q http://oauth2:<token>@<host>/acme/smart.git <tmp>/j-oauth2-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-oauth2-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-oauth2-token", - "cmd": "git push http://oauth2:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-oauth2-token': \nremote: <base>/acme/smart/compare/main...j-oauth2-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-oauth2-token" }, { "kind": "git", "name": "fetch-oauth2-token", - "cmd": "git fetch -q http://oauth2:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bot-token", - "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bot-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-bot-token", - "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-bot-token': \nremote: <base>/acme/smart/compare/main...j-bot-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-token" }, { "kind": "git", "name": "fetch-bot-token", - "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-other-name-admin-token", - "cmd": "git clone -q http://someone:<token>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-other-name-admin-token", - "cmd": "git push http://someone:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-other-name-admin-token': \nremote: <base>/acme/smart/compare/main...j-other-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-other-name-admin-token" }, { "kind": "git", "name": "fetch-other-name-admin-token", - "cmd": "git fetch -q http://someone:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bot-name-admin-token", - "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-bot-name-admin-token", - "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-bot-name-admin-token': \nremote: <base>/acme/smart/compare/main...j-bot-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-name-admin-token" }, { "kind": "git", "name": "fetch-bot-name-admin-token", - "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-token-as-username", - "cmd": "git clone -q http://<token>:@<host>/acme/smart.git <tmp>/j-token-as-username", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-token-as-username", "ok": true, "output": "" }, { "kind": "git", "name": "push-token-as-username", - "cmd": "git push http://<token>:@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-token-as-username': \nremote: <base>/acme/smart/compare/main...j-token-as-username \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-token-as-username" }, { "kind": "git", "name": "fetch-token-as-username", - "cmd": "git fetch -q http://<token>:@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bad-token", - "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bad-token", "ok": false, "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -143,7 +143,7 @@ { "kind": "git", "name": "push-bad-token", - "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", "ok": false, "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -154,7 +154,7 @@ { "kind": "git", "name": "fetch-bad-token", - "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": false, "output": "remote: Verify\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -359,63 +359,63 @@ { "kind": "git", "name": "fetch-sha-tip-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#1>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-old-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#2>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-dead-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#3>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-tip-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#1>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-old-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#2>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-dead-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#3>", "ok": true, "output": "" }, { "kind": "git", "name": "ls-remote-v0", - "cmd": "git -c protocol.version=0 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "cmd": "git -c protocol.version=0 ls-remote http://<creds>@<host>/acme/smart.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" }, { "kind": "git", "name": "ls-remote-v2", - "cmd": "git -c protocol.version=2 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "cmd": "git -c protocol.version=2 ls-remote http://<creds>@<host>/acme/smart.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" }, { "kind": "git", "name": "clone-filter-blob-none", - "cmd": "git clone --filter=blob:none http://<admin>:<token>@<host>/acme/smart.git <tmp>/jpartial", + "cmd": "git clone --filter=blob:none http://<creds>@<host>/acme/smart.git <tmp>/jpartial", "ok": true, "output": "Cloning into '<tmp>/jpartial'..." }, @@ -434,7 +434,7 @@ { "kind": "git", "name": "clone-depth-1", - "cmd": "git clone -q --depth=1 http://<admin>:<token>@<host>/acme/smart.git <tmp>/jshallow", + "cmd": "git clone -q --depth=1 http://<creds>@<host>/acme/smart.git <tmp>/jshallow", "ok": true, "output": "" }, @@ -454,14 +454,14 @@ { "kind": "git", "name": "flw-absent-expected-and-absent", - "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b: http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": true, "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/compare/main...b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#4> -> b" }, { "kind": "git", "name": "flw-absent-expected-but-exists", - "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b: http://<creds>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ @@ -472,14 +472,14 @@ { "kind": "git", "name": "flw-correct-lease-nonff", - "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<creds>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": true, "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/compare/main...b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n + <short>..<short> <sha#5> -> b (forced update)" }, { "kind": "git", "name": "flw-stale-lease", - "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ @@ -490,7 +490,7 @@ { "kind": "git", "name": "push-nonff-without-force", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", "refusal": [ @@ -501,7 +501,7 @@ { "kind": "git", "name": "push-tags", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", + "cmd": "git push http://<creds>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", "ok": true, "output": "remote: .. Processing 2 references \nremote: Processed 2 references in total \nTo <base>/acme/smart.git\n * [new tag] v1 -> v1\n * [new tag] v2 -> v2" }, @@ -575,7 +575,7 @@ { "kind": "git", "name": "delete-tag-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/tags/v1", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/tags/v1", "ok": true, "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] v1" }, @@ -607,7 +607,7 @@ { "kind": "git", "name": "delete-branch-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/b", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/heads/b", "ok": true, "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] b" }, @@ -631,7 +631,7 @@ { "kind": "git", "name": "delete-default-branch-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/heads/main", "ok": false, "output": "remote: \nremote: Gitea: branch main is the default branch and cannot be deleted \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ diff --git a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json index 11872b73..1d906925 100644 --- a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json @@ -478,7 +478,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -780,7 +780,7 @@ { "kind": "git", "name": "ls-remote-vis-dave", - "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/vis.git", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found", "refusal": [ @@ -806,7 +806,7 @@ { "kind": "git", "name": "ls-remote-ghost-dave", - "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/ghost.git", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found", "refusal": [ @@ -897,7 +897,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -989,7 +989,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1081,7 +1081,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1173,7 +1173,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1265,7 +1265,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1357,7 +1357,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1449,7 +1449,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1541,7 +1541,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1633,7 +1633,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1741,7 +1741,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1833,7 +1833,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1925,7 +1925,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2017,7 +2017,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2109,7 +2109,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2201,7 +2201,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2293,7 +2293,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2385,7 +2385,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2477,7 +2477,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2569,7 +2569,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2661,7 +2661,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2753,7 +2753,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2845,7 +2845,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3005,7 +3005,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3097,7 +3097,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3189,7 +3189,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3281,7 +3281,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3373,7 +3373,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3465,7 +3465,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3557,7 +3557,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3649,7 +3649,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3741,7 +3741,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json index 59eadf9e..35abb05a 100644 --- a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -161,7 +161,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -266,7 +266,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -368,7 +368,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -473,7 +473,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -578,7 +578,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -684,7 +684,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -790,7 +790,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -923,7 +923,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1079,7 +1079,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/M-names.json b/crates/forge/conformance/fixtures/1.22.6/M-names.json index 273e2e00..49570018 100644 --- a/crates/forge/conformance/fixtures/1.22.6/M-names.json +++ b/crates/forge/conformance/fixtures/1.22.6/M-names.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -298,7 +298,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -542,7 +542,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -648,7 +648,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -844,7 +844,7 @@ "html_url": "<base>/acme/a..b", "url": "<base>/api/v1/repos/acme/a..b", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/a..b.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/a..b.git", "clone_url": "<base>/acme/a..b.git", "original_url": "", "website": "", @@ -950,7 +950,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -1056,7 +1056,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1162,7 +1162,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1268,7 +1268,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1392,7 +1392,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1873,7 +1873,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1978,7 +1978,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2092,7 +2092,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2173,14 +2173,14 @@ { "kind": "git", "name": "ls-remote-old-name", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/rename-me.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/rename-me.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main\nwarning: redirecting to <base>/acme/renamed/" }, { "kind": "git", "name": "ls-remote-new-name", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/renamed.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/renamed.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main" }, @@ -2255,7 +2255,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2360,7 +2360,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json index e574e51d..3a9ebaf3 100644 --- a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -162,7 +162,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -264,7 +264,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -318,10 +318,16 @@ { "kind": "git", "name": "ls-remote-symref-after-change", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/dflt.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/dflt.git HEAD", "ok": true, "output": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD" }, + { + "kind": "note", + "key": "ls-remote-symref-after-change_stdout", + "value": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD", + "strict": true + }, { "kind": "http", "method": "GET", @@ -464,7 +470,7 @@ { "kind": "git", "name": "clone-after-change", - "cmd": "git clone -q http://<admin>:<token>@<host>/acme/dflt.git <tmp>/ndflt", + "cmd": "git clone -q http://<creds>@<host>/acme/dflt.git <tmp>/ndflt", "ok": true, "output": "" }, @@ -528,7 +534,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -639,7 +645,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -750,7 +756,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -813,10 +819,16 @@ { "kind": "git", "name": "ls-remote-symref-trunk-first", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh1.git HEAD", "ok": true, "output": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD" }, + { + "kind": "note", + "key": "ls-remote-symref-trunk-first_stdout", + "value": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD", + "strict": true + }, { "kind": "http", "method": "GET", @@ -917,7 +929,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1028,7 +1040,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1139,7 +1151,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1202,10 +1214,16 @@ { "kind": "git", "name": "ls-remote-symref-main-pushed-first", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh3.git HEAD", "ok": true, "output": "" }, + { + "kind": "note", + "key": "ls-remote-symref-main-pushed-first_stdout", + "value": "", + "strict": true + }, { "kind": "http", "method": "GET", @@ -1257,7 +1275,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1320,9 +1338,15 @@ { "kind": "git", "name": "ls-remote-symref-develop-pushed-second", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh3.git HEAD", "ok": true, "output": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD" + }, + { + "kind": "note", + "key": "ls-remote-symref-develop-pushed-second_stdout", + "value": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD", + "strict": true } ] } diff --git a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json index 97664d72..05c08732 100644 --- a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -210,7 +210,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -384,7 +384,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -482,7 +482,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -813,7 +813,7 @@ { "kind": "git", "name": "ls-remote-pull-refs", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "cmd": "git ls-remote http://<creds>@<host>/acme/life.git refs/pull/*", "ok": true, "output": "<sha#3>\trefs/pull/1/head" }, @@ -935,7 +935,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1033,7 +1033,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1203,7 +1203,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1301,7 +1301,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1488,7 +1488,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1586,7 +1586,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1648,7 +1648,7 @@ { "kind": "git", "name": "ls-remote-pull-refs-after-delete", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "cmd": "git ls-remote http://<creds>@<host>/acme/life.git refs/pull/*", "ok": true, "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" }, @@ -1873,7 +1873,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1971,7 +1971,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2154,7 +2154,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2252,7 +2252,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2423,13 +2423,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2521,13 +2521,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2692,13 +2692,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2790,13 +2790,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2958,13 +2958,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3056,13 +3056,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3246,7 +3246,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3254,7 +3254,7 @@ "forks_count": 0, "watchers_count": 1, "open_issues_count": 0, - "open_pr_counter": 2, + "open_pr_counter": 3, "release_counter": 0, "default_branch": "main", "archived": false, @@ -3344,7 +3344,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3352,7 +3352,7 @@ "forks_count": 0, "watchers_count": 1, "open_issues_count": 0, - "open_pr_counter": 2, + "open_pr_counter": 3, "release_counter": 0, "default_branch": "main", "archived": false, diff --git a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json index 0b3a794c..e33c70f4 100644 --- a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json @@ -115,7 +115,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -213,7 +213,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -371,7 +371,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -469,7 +469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -739,7 +739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -897,7 +897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1167,7 +1167,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1265,7 +1265,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1437,7 +1437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1535,7 +1535,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1693,7 +1693,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1791,7 +1791,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1963,7 +1963,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2219,7 +2219,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2317,7 +2317,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2488,7 +2488,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2586,7 +2586,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2744,7 +2744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2842,7 +2842,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3000,7 +3000,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3098,7 +3098,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3256,7 +3256,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3354,7 +3354,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3512,7 +3512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3610,7 +3610,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3787,7 +3787,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3885,7 +3885,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4043,7 +4043,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4141,7 +4141,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4299,7 +4299,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4397,7 +4397,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4555,7 +4555,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4653,7 +4653,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4811,7 +4811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4909,7 +4909,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5086,7 +5086,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5184,7 +5184,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5342,7 +5342,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5440,7 +5440,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5598,7 +5598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5696,7 +5696,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5854,7 +5854,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5952,7 +5952,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6110,7 +6110,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6208,7 +6208,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6385,7 +6385,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6483,7 +6483,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6641,7 +6641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6739,7 +6739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6897,7 +6897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6995,7 +6995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7153,7 +7153,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7251,7 +7251,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7409,7 +7409,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7507,7 +7507,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7684,7 +7684,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7782,7 +7782,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7940,7 +7940,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8038,7 +8038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8196,7 +8196,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8294,7 +8294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8452,7 +8452,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8550,7 +8550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8708,7 +8708,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8806,7 +8806,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8983,7 +8983,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9081,7 +9081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9239,7 +9239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9337,7 +9337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9495,7 +9495,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9593,7 +9593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9751,7 +9751,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9849,7 +9849,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10105,7 +10105,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10276,7 +10276,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10374,7 +10374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10532,7 +10532,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10630,7 +10630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10788,7 +10788,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10886,7 +10886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11044,7 +11044,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11142,7 +11142,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11300,7 +11300,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11398,7 +11398,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11569,7 +11569,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11667,7 +11667,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11825,7 +11825,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11923,7 +11923,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12081,7 +12081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12179,7 +12179,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12337,7 +12337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12435,7 +12435,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12593,7 +12593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12691,7 +12691,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12862,7 +12862,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12960,7 +12960,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13118,7 +13118,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13216,7 +13216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13374,7 +13374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13472,7 +13472,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13630,7 +13630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13886,7 +13886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13984,7 +13984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14947,13 +14947,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/pages/languages", "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15129,13 +15129,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/pages/languages", "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15245,7 +15245,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15337,7 +15337,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15446,7 +15446,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json index 26c360ad..98265109 100644 --- a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json @@ -170,20 +170,20 @@ }, { "id": "<id:id#3>", - "name": "all", + "name": "ci", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "all" + "read:repository" ] }, { "id": "<id:id#4>", - "name": "ci", + "name": "all", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "read:repository" + "all" ] } ], @@ -423,7 +423,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://<creds>@localhost:2222/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json index 71761a95..cc2a6b50 100644 --- a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json @@ -115,7 +115,7 @@ { "kind": "git", "name": "read-collab-push-tag", - "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", + "cmd": "git push http://<creds>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", "ok": false, "output": "remote: \nremote: Gitea: User permission denied for writing. \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", "refusal": [ @@ -127,7 +127,7 @@ { "kind": "git", "name": "ls-remote-all-refs", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/refs.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/refs.git", "ok": true, "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" }, @@ -361,13 +361,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -459,13 +459,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/refs/languages", "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json index a803e540..360737b4 100644 --- a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -215,7 +215,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -386,7 +386,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -484,7 +484,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -685,7 +685,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -783,7 +783,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -959,7 +959,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1057,7 +1057,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1536,7 +1536,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1634,7 +1634,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1810,7 +1810,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1908,7 +1908,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2079,7 +2079,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2177,7 +2177,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2368,7 +2368,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2466,7 +2466,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2637,7 +2637,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2735,7 +2735,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2936,13 +2936,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3034,13 +3034,13 @@ "template": false, "parent": null, "mirror": false, - "size": 28, + "size": 27, "language": "", "languages_url": "<base>/api/v1/repos/acme/outcomes/languages", "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3246,7 +3246,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3344,7 +3344,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3532,7 +3532,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3630,7 +3630,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3798,7 +3798,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3896,7 +3896,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json index 036e062e..b1fc531c 100644 --- a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json @@ -298,7 +298,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json b/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json index a6cf6f37..6479e40c 100644 --- a/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json +++ b/crates/forge/conformance/fixtures/1.22.6/V-smart-http-bytes.json @@ -192,7 +192,8 @@ "content-type": "application/x-git-upload-pack-result", "cache-control": "max-age=0, private, must-revalidate, no-transform" }, - "body_prefix_hex": "30303038" + "body_prefix_hex": "30303038", + "archive_error": "not a zip or tar.gz" }, { "kind": "note", @@ -210,7 +211,8 @@ "content-type": "application/x-git-upload-pack-result", "cache-control": "max-age=0, private, must-revalidate, no-transform" }, - "body_prefix_hex": "30303038" + "body_prefix_hex": "30303038", + "archive_error": "not a zip or tar.gz" }, { "kind": "note", diff --git a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json index 3912d900..c8ae52ad 100644 --- a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json @@ -89,7 +89,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -275,7 +275,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -461,7 +461,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -647,7 +647,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1019,7 +1019,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1205,7 +1205,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1497,6 +1497,11 @@ "all" ] } + ], + "volatile": [ + "id", + "name", + "scopes" ] }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/A-meta.json b/crates/forge/conformance/fixtures/1.26.2/A-meta.json index 1658eb0f..45a472ff 100644 --- a/crates/forge/conformance/fixtures/1.26.2/A-meta.json +++ b/crates/forge/conformance/fixtures/1.26.2/A-meta.json @@ -156,9 +156,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json index 4e6bfc9f..39333e6b 100644 --- a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json @@ -339,6 +339,69 @@ "can_create_repository": false } }, + { + "kind": "http", + "method": "POST", + "path": "/api/v1/orgs/acme/teams", + "auth": "admin", + "status": 201, + "request": { + "name": "devs", + "permission": "read", + "includes_all_repositories": false, + "units": [ + "repo.code", + "repo.pulls" + ] + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "body": { + "id": "<id:id#1>", + "name": "devs", + "description": "", + "organization": { + "id": "<id:organization.id#1>", + "name": "acme", + "full_name": "Acme", + "email": "", + "avatar_url": "<base>/avatars/53bce4f1dfa0fe8e7ca126f91b35d3a6", + "description": "", + "website": "", + "location": "", + "visibility": "private", + "repo_admin_change_team_access": false, + "username": "acme" + }, + "includes_all_repositories": false, + "permission": "none", + "units": [ + "repo.code", + "repo.pulls" + ], + "units_map": { + "repo.code": "read", + "repo.pulls": "read" + }, + "can_create_org_repo": false + }, + "tags": [ + "team" + ] + }, + { + "kind": "http", + "method": "PUT", + "path": "/api/v1/teams/<id:path:teams#1>/members/carol", + "auth": "admin", + "status": 204, + "headers": {}, + "body_text": "", + "tags": [ + "team" + ] + }, { "kind": "http", "method": "GET", @@ -354,7 +417,10 @@ "can_write": false, "can_read": false, "can_create_repository": false - } + }, + "tags": [ + "team" + ] }, { "kind": "http", @@ -621,7 +687,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -858,9 +924,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/C-repos.json b/crates/forge/conformance/fixtures/1.26.2/C-repos.json index 073e593c..7a818efb 100644 --- a/crates/forge/conformance/fixtures/1.26.2/C-repos.json +++ b/crates/forge/conformance/fixtures/1.26.2/C-repos.json @@ -60,7 +60,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -302,7 +302,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -408,7 +408,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -474,9 +474,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -532,7 +532,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -860,7 +860,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -956,7 +956,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1052,7 +1052,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1148,7 +1148,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1260,7 +1260,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1590,7 +1590,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1696,7 +1696,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1802,7 +1802,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1912,7 +1912,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1989,9 +1989,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -2016,14 +2016,14 @@ { "kind": "git", "name": "push-write-scoped-token", - "cmd": "git push http://bot:<token>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/bot-scoped-branch", "ok": true, "output": "remote: \nremote: Create a new pull request for 'bot-scoped-branch': \nremote: <base>/acme/alpha/pulls/new/bot-scoped-branch \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/alpha.git\n * [new branch] HEAD -> bot-scoped-branch" }, { "kind": "git", "name": "push-readonly-scope", - "cmd": "git push http://alice:<token>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/ro-scope", "ok": false, "output": "remote: Forbidden\nfatal: unable to access '<base>/acme/alpha.git/': The requested URL returned error: 403", "refusal": [ @@ -2034,7 +2034,7 @@ { "kind": "git", "name": "push-read-collab", - "cmd": "git push http://carol:<token>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/carol-branch", "ok": false, "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/alpha.git\n ! [remote rejected] HEAD -> carol-branch (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/alpha.git'", "refusal": [ @@ -2046,7 +2046,7 @@ { "kind": "git", "name": "push-no-grant", - "cmd": "git push http://dave:<token>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", + "cmd": "git push http://<creds>@<host>/acme/alpha.git HEAD:refs/heads/dave-branch", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", "refusal": [ @@ -2057,7 +2057,7 @@ { "kind": "git", "name": "clone-no-grant", - "cmd": "git clone http://dave:<token>@<host>/acme/alpha.git <tmp>/dave-clone", + "cmd": "git clone http://<creds>@<host>/acme/alpha.git <tmp>/dave-clone", "ok": false, "output": "Cloning into '<tmp>/dave-clone'...\nremote: Repository not found\nfatal: repository '<base>/acme/alpha.git/' not found", "refusal": [ @@ -2068,7 +2068,7 @@ { "kind": "git", "name": "clone-read-collab", - "cmd": "git clone http://carol:<token>@<host>/acme/alpha.git <tmp>/carol-clone", + "cmd": "git clone http://<creds>@<host>/acme/alpha.git <tmp>/carol-clone", "ok": true, "output": "Cloning into '<tmp>/carol-clone'..." }, @@ -2127,7 +2127,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2277,7 +2277,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json index ca692616..fb4b15a4 100644 --- a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -221,11 +221,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", "errors": [ "object does not exist [id: main, rel_path: ]" - ] + ], + "message": "not found" } }, { @@ -293,9 +293,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "url": "<base>/api/swagger", "errors": null, - "message": "not found" + "message": "not found", + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json index 4d432cf2..fdf261b8 100644 --- a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -442,9 +442,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -1290,9 +1290,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "commit doesn't exist: <sha#6>", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "commit doesn't exist: <sha#6>" } }, { @@ -2207,7 +2207,44 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.zip?rev=<sha#18>>; rel=\"immutable\"" }, - "body_prefix_hex": "504b0304" + "body_prefix_hex": "504b0304", + "archive": [ + { + "name": "hist/", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 15, + "sha256": "f817eb30fc16a9f8613f4afcc0894740f77be6e89f88c99380305a89069a272f" + }, + { + "name": "hist/docs/", + "size": 0, + "sha256": null + }, + { + "name": "hist/docs/guide.md", + "size": 6, + "sha256": "90c390ec1de806bf945885cd0af51e90c3cd8cda0d0ff676051a56c20848c90f" + }, + { + "name": "hist/new.txt", + "size": 4, + "sha256": "7aa7a5359173d05b63cfd682e3c38487f3cb4f7f1d60659fe59fab1505977d4c" + }, + { + "name": "hist/src/", + "size": 0, + "sha256": null + }, + { + "name": "hist/src/lib.rs", + "size": 13, + "sha256": "536e506bb90914c243a12b397b9a998f85ae2cbd9ba02dfd03a9e155ca5ca0f4" + } + ] }, { "kind": "http", @@ -2219,7 +2256,44 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#18>.tar.gz?rev=<sha#18>>; rel=\"immutable\"" }, - "body_prefix_hex": "1f8b0800" + "body_prefix_hex": "1f8b0800", + "archive": [ + { + "name": "hist", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 15, + "sha256": "f817eb30fc16a9f8613f4afcc0894740f77be6e89f88c99380305a89069a272f" + }, + { + "name": "hist/docs", + "size": 0, + "sha256": null + }, + { + "name": "hist/docs/guide.md", + "size": 6, + "sha256": "90c390ec1de806bf945885cd0af51e90c3cd8cda0d0ff676051a56c20848c90f" + }, + { + "name": "hist/new.txt", + "size": 4, + "sha256": "7aa7a5359173d05b63cfd682e3c38487f3cb4f7f1d60659fe59fab1505977d4c" + }, + { + "name": "hist/src", + "size": 0, + "sha256": null + }, + { + "name": "hist/src/lib.rs", + "size": 13, + "sha256": "536e506bb90914c243a12b397b9a998f85ae2cbd9ba02dfd03a9e155ca5ca0f4" + } + ] }, { "kind": "http", @@ -2231,7 +2305,19 @@ "content-type": "application/octet-stream", "link": "<<base>/api/v1/repos/acme/hist/archive/<sha#4>.zip?rev=<sha#4>>; rel=\"immutable\"" }, - "body_prefix_hex": "504b0304" + "body_prefix_hex": "504b0304", + "archive": [ + { + "name": "hist/", + "size": 0, + "sha256": null + }, + { + "name": "hist/README.md", + "size": 7, + "sha256": "f61fd51ed8a1210100bca867c775464457dd5a21dd2368bfed695de3a2ca80e1" + } + ] }, { "kind": "http", diff --git a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json index deec4861..a3810000 100644 --- a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json @@ -118,7 +118,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -220,7 +220,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -423,7 +423,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -525,7 +525,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -778,7 +778,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -880,7 +880,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1041,7 +1041,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1143,7 +1143,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1428,7 +1428,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1589,7 +1589,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1691,7 +1691,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1878,7 +1878,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1980,7 +1980,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2184,7 +2184,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2286,7 +2286,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2468,7 +2468,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2570,7 +2570,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2731,7 +2731,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2833,7 +2833,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3186,7 +3186,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3288,7 +3288,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3464,7 +3464,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3566,7 +3566,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3744,7 +3744,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3846,7 +3846,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4026,7 +4026,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4128,7 +4128,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4258,7 +4258,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4312,7 +4312,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4366,7 +4366,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4420,7 +4420,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4492,7 +4492,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4544,7 +4544,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4584,7 +4584,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4624,7 +4624,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4664,7 +4664,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4717,7 +4717,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4757,7 +4757,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4797,7 +4797,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4837,7 +4837,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4888,7 +4888,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-6", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4974,7 +4974,7 @@ }, "body": { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { @@ -5023,7 +5023,7 @@ "body": [ { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { diff --git a/crates/forge/conformance/fixtures/1.26.2/G-merge.json b/crates/forge/conformance/fixtures/1.26.2/G-merge.json index 541944cd..3bbde242 100644 --- a/crates/forge/conformance/fixtures/1.26.2/G-merge.json +++ b/crates/forge/conformance/fixtures/1.26.2/G-merge.json @@ -127,7 +127,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -229,7 +229,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -454,13 +454,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -556,13 +556,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -834,13 +834,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -936,13 +936,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1183,7 +1183,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1285,7 +1285,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1525,7 +1525,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1627,7 +1627,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1821,7 +1821,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1923,7 +1923,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2105,7 +2105,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2207,7 +2207,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2393,13 +2393,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2495,13 +2495,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2689,13 +2689,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2791,13 +2791,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2875,9 +2875,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -2983,13 +2983,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3085,13 +3085,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3243,7 +3243,7 @@ "html_url": "<base>/acme/merges/pulls/11", "diff_url": "<base>/acme/merges/pulls/11.diff", "patch_url": "<base>/acme/merges/pulls/11.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#15>", @@ -3319,7 +3319,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3421,7 +3421,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3579,7 +3579,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3649,13 +3649,13 @@ "fork": false, "template": false, "mirror": false, - "size": 37, + "size": 36, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3751,13 +3751,13 @@ "fork": false, "template": false, "mirror": false, - "size": 37, + "size": 36, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4021,13 +4021,13 @@ "fork": false, "template": false, "mirror": false, - "size": 41, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4123,13 +4123,13 @@ "fork": false, "template": false, "mirror": false, - "size": 41, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4326,7 +4326,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4428,7 +4428,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json index 20e0de3c..9304c33d 100644 --- a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -291,7 +291,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -499,7 +499,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -965,7 +965,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1208,7 +1208,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1486,7 +1486,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1799,7 +1799,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2865,7 +2865,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3145,9 +3145,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -3293,7 +3293,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3521,7 +3521,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json index b7b2aa2d..5911fe7e 100644 --- a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json @@ -242,7 +242,7 @@ { "kind": "git", "name": "push-protected-admin", - "cmd": "git push http://<admin>:<token>@<host>/acme/prot.git HEAD:refs/heads/main", + "cmd": "git push http://<creds>@<host>/acme/prot.git HEAD:refs/heads/main", "ok": false, "output": "remote: \nremote: error: \nremote: error: Not allowed to push to protected branch main \nremote: error: \nTo <base>/acme/prot.git\n ! [remote rejected] HEAD -> main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/prot.git'", "refusal": [ @@ -414,9 +414,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -429,9 +429,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json index a45aa6fd..42b56366 100644 --- a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json @@ -6,133 +6,133 @@ { "kind": "git", "name": "clone-admin-token", - "cmd": "git clone -q http://<admin>:<token>@<host>/acme/smart.git <tmp>/j-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-admin-token", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-admin-token': \nremote: <base>/acme/smart/pulls/new/j-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-admin-token" }, { "kind": "git", "name": "fetch-admin-token", - "cmd": "git fetch -q http://<admin>:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-oauth2-token", - "cmd": "git clone -q http://oauth2:<token>@<host>/acme/smart.git <tmp>/j-oauth2-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-oauth2-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-oauth2-token", - "cmd": "git push http://oauth2:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-oauth2-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-oauth2-token': \nremote: <base>/acme/smart/pulls/new/j-oauth2-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-oauth2-token" }, { "kind": "git", "name": "fetch-oauth2-token", - "cmd": "git fetch -q http://oauth2:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bot-token", - "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bot-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-bot-token", - "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-bot-token': \nremote: <base>/acme/smart/pulls/new/j-bot-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-token" }, { "kind": "git", "name": "fetch-bot-token", - "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-other-name-admin-token", - "cmd": "git clone -q http://someone:<token>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-other-name-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-other-name-admin-token", - "cmd": "git push http://someone:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-other-name-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-other-name-admin-token': \nremote: <base>/acme/smart/pulls/new/j-other-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-other-name-admin-token" }, { "kind": "git", "name": "fetch-other-name-admin-token", - "cmd": "git fetch -q http://someone:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bot-name-admin-token", - "cmd": "git clone -q http://bot:<token>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bot-name-admin-token", "ok": true, "output": "" }, { "kind": "git", "name": "push-bot-name-admin-token", - "cmd": "git push http://bot:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bot-name-admin-token", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-bot-name-admin-token': \nremote: <base>/acme/smart/pulls/new/j-bot-name-admin-token \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-bot-name-admin-token" }, { "kind": "git", "name": "fetch-bot-name-admin-token", - "cmd": "git fetch -q http://bot:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-token-as-username", - "cmd": "git clone -q http://<token>:@<host>/acme/smart.git <tmp>/j-token-as-username", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-token-as-username", "ok": true, "output": "" }, { "kind": "git", "name": "push-token-as-username", - "cmd": "git push http://<token>:@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-token-as-username", "ok": true, "output": "remote: \nremote: Create a new pull request for 'j-token-as-username': \nremote: <base>/acme/smart/pulls/new/j-token-as-username \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#1> -> j-token-as-username" }, { "kind": "git", "name": "fetch-token-as-username", - "cmd": "git fetch -q http://<token>:@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": true, "output": "" }, { "kind": "git", "name": "clone-bad-token", - "cmd": "git clone -q http://nobody:<token>@<host>/acme/smart.git <tmp>/j-bad-token", + "cmd": "git clone -q http://<creds>@<host>/acme/smart.git <tmp>/j-bad-token", "ok": false, "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -143,7 +143,7 @@ { "kind": "git", "name": "push-bad-token", - "cmd": "git push http://nobody:<token>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#1>:refs/heads/j-bad-token", "ok": false, "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -154,7 +154,7 @@ { "kind": "git", "name": "fetch-bad-token", - "cmd": "git fetch -q http://nobody:<token>@<host>/acme/smart.git main", + "cmd": "git fetch -q http://<creds>@<host>/acme/smart.git main", "ok": false, "output": "remote: Failed to authenticate user\nfatal: Authentication failed for '<base>/acme/smart.git/'", "refusal": [ @@ -359,63 +359,63 @@ { "kind": "git", "name": "fetch-sha-tip-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#1>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-old-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#2>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-dead-v0", - "cmd": "git -c protocol.version=0 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "cmd": "git -c protocol.version=0 fetch -q http://<creds>@<host>/acme/smart.git <sha#3>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-tip-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#1>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#1>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-old-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#2>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#2>", "ok": true, "output": "" }, { "kind": "git", "name": "fetch-sha-dead-v2", - "cmd": "git -c protocol.version=2 fetch -q http://<admin>:<token>@<host>/acme/smart.git <sha#3>", + "cmd": "git -c protocol.version=2 fetch -q http://<creds>@<host>/acme/smart.git <sha#3>", "ok": true, "output": "" }, { "kind": "git", "name": "ls-remote-v0", - "cmd": "git -c protocol.version=0 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "cmd": "git -c protocol.version=0 ls-remote http://<creds>@<host>/acme/smart.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" }, { "kind": "git", "name": "ls-remote-v2", - "cmd": "git -c protocol.version=2 ls-remote http://<admin>:<token>@<host>/acme/smart.git", + "cmd": "git -c protocol.version=2 ls-remote http://<creds>@<host>/acme/smart.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/j-admin-token\n<sha#1>\trefs/heads/j-bot-name-admin-token\n<sha#1>\trefs/heads/j-bot-token\n<sha#1>\trefs/heads/j-oauth2-token\n<sha#1>\trefs/heads/j-other-name-admin-token\n<sha#1>\trefs/heads/j-token-as-username\n<sha#1>\trefs/heads/main" }, { "kind": "git", "name": "clone-filter-blob-none", - "cmd": "git clone --filter=blob:none http://<admin>:<token>@<host>/acme/smart.git <tmp>/jpartial", + "cmd": "git clone --filter=blob:none http://<creds>@<host>/acme/smart.git <tmp>/jpartial", "ok": true, "output": "Cloning into '<tmp>/jpartial'..." }, @@ -434,7 +434,7 @@ { "kind": "git", "name": "clone-depth-1", - "cmd": "git clone -q --depth=1 http://<admin>:<token>@<host>/acme/smart.git <tmp>/jshallow", + "cmd": "git clone -q --depth=1 http://<creds>@<host>/acme/smart.git <tmp>/jshallow", "ok": true, "output": "" }, @@ -454,14 +454,14 @@ { "kind": "git", "name": "flw-absent-expected-and-absent", - "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b: http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": true, "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/pulls/new/b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n * [new branch] <sha#4> -> b" }, { "kind": "git", "name": "flw-absent-expected-but-exists", - "cmd": "git push --force-with-lease=refs/heads/b: http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b: http://<creds>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#5> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ @@ -472,14 +472,14 @@ { "kind": "git", "name": "flw-correct-lease-nonff", - "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#5>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<creds>@<host>/acme/smart.git <sha#5>:refs/heads/b", "ok": true, "output": "remote: \nremote: Create a new pull request for 'b': \nremote: <base>/acme/smart/pulls/new/b \nremote: \nremote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n + <short>..<short> <sha#5> -> b (forced update)" }, { "kind": "git", "name": "flw-stale-lease", - "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push --force-with-lease=refs/heads/b:<sha#4> http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (stale info)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ @@ -490,7 +490,7 @@ { "kind": "git", "name": "push-nonff-without-force", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git <sha#4>:refs/heads/b", + "cmd": "git push http://<creds>@<host>/acme/smart.git <sha#4>:refs/heads/b", "ok": false, "output": "To <base>/acme/smart.git\n ! [rejected] <sha#4> -> b (non-fast-forward)\nerror: failed to push some refs to '<base>/acme/smart.git'\nhint: Updates were rejected because a pushed branch tip is behind its remote\nhint: counterpart. If you want to integrate the remote changes, use 'git pull'\nhint: before pushing again.\nhint: See the 'Note about fast-forwards' in 'git push --help' for details.", "refusal": [ @@ -501,7 +501,7 @@ { "kind": "git", "name": "push-tags", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", + "cmd": "git push http://<creds>@<host>/acme/smart.git refs/tags/v1 refs/tags/v2", "ok": true, "output": "remote: .. Processing 2 references \nremote: Processed 2 references in total \nTo <base>/acme/smart.git\n * [new tag] v1 -> v1\n * [new tag] v2 -> v2" }, @@ -575,7 +575,7 @@ { "kind": "git", "name": "delete-tag-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/tags/v1", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/tags/v1", "ok": true, "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] v1" }, @@ -607,7 +607,7 @@ { "kind": "git", "name": "delete-branch-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/b", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/heads/b", "ok": true, "output": "remote: . Processing 1 references \nremote: Processed 1 references in total \nTo <base>/acme/smart.git\n - [deleted] b" }, @@ -629,7 +629,7 @@ { "kind": "git", "name": "delete-default-branch-by-push", - "cmd": "git push http://<admin>:<token>@<host>/acme/smart.git :refs/heads/main", + "cmd": "git push http://<creds>@<host>/acme/smart.git :refs/heads/main", "ok": false, "output": "remote: \nremote: error: \nremote: error: branch main is the default branch and cannot be deleted \nremote: error: \nTo <base>/acme/smart.git\n ! [remote rejected] main (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/smart.git'", "refusal": [ diff --git a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json index 68017e98..29612298 100644 --- a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json @@ -291,9 +291,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -306,9 +306,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -364,9 +364,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -477,7 +477,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -655,9 +655,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "url": "<base>/api/swagger", "errors": null, - "message": "not found" + "message": "not found", + "url": "<base>/api/swagger" } }, { @@ -785,7 +785,7 @@ { "kind": "git", "name": "ls-remote-vis-dave", - "cmd": "git ls-remote http://dave:<token>@<host>/acme/vis.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/vis.git", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/vis.git/' not found", "refusal": [ @@ -810,7 +810,7 @@ { "kind": "git", "name": "ls-remote-ghost-dave", - "cmd": "git ls-remote http://dave:<token>@<host>/acme/ghost.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/ghost.git", "ok": false, "output": "remote: Repository not found\nfatal: repository '<base>/acme/ghost.git/' not found", "refusal": [ @@ -900,7 +900,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -996,7 +996,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1092,7 +1092,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1188,7 +1188,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1284,7 +1284,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1380,7 +1380,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1476,7 +1476,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1572,7 +1572,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1668,7 +1668,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1780,7 +1780,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1876,7 +1876,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1972,7 +1972,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2068,7 +2068,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2164,7 +2164,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2260,7 +2260,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2356,7 +2356,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2452,7 +2452,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2548,7 +2548,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2644,7 +2644,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2740,7 +2740,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2836,7 +2836,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2932,7 +2932,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3096,7 +3096,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3192,7 +3192,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3288,7 +3288,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3384,7 +3384,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3480,7 +3480,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3576,7 +3576,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3672,7 +3672,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3768,7 +3768,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3864,7 +3864,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json index ba9553e7..e998d8ff 100644 --- a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -164,7 +164,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -273,7 +273,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -379,7 +379,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -488,7 +488,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -597,7 +597,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -707,7 +707,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -817,7 +817,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -896,9 +896,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -954,7 +954,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://<creds>@localhost:2222/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1114,7 +1114,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", @@ -1180,9 +1180,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/M-names.json b/crates/forge/conformance/fixtures/1.26.2/M-names.json index 3e8b77ca..21880e0c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/M-names.json +++ b/crates/forge/conformance/fixtures/1.26.2/M-names.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -199,7 +199,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -305,7 +305,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -411,7 +411,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -557,7 +557,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -667,7 +667,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -885,7 +885,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1105,7 +1105,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1215,7 +1215,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1343,7 +1343,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1837,7 +1837,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1946,7 +1946,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2150,14 +2150,14 @@ { "kind": "git", "name": "ls-remote-old-name", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/rename-me.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/rename-me.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main\nwarning: redirecting to <base>/acme/renamed/" }, { "kind": "git", "name": "ls-remote-new-name", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/renamed.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/renamed.git", "ok": true, "output": "<sha#1>\tHEAD\n<sha#1>\trefs/heads/main" }, @@ -2231,7 +2231,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2340,7 +2340,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json index 60e00817..8ce399ce 100644 --- a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json @@ -56,7 +56,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -165,7 +165,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -271,7 +271,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -330,10 +330,16 @@ { "kind": "git", "name": "ls-remote-symref-after-change", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/dflt.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/dflt.git HEAD", "ok": true, "output": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD" }, + { + "kind": "note", + "key": "ls-remote-symref-after-change_stdout", + "value": "ref: refs/heads/dev\tHEAD\n<sha#1>\tHEAD", + "strict": true + }, { "kind": "http", "method": "GET", @@ -480,7 +486,7 @@ { "kind": "git", "name": "clone-after-change", - "cmd": "git clone -q http://<admin>:<token>@<host>/acme/dflt.git <tmp>/ndflt", + "cmd": "git clone -q http://<creds>@<host>/acme/dflt.git <tmp>/ndflt", "ok": true, "output": "" }, @@ -543,7 +549,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -658,7 +664,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -773,7 +779,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -841,10 +847,16 @@ { "kind": "git", "name": "ls-remote-symref-trunk-first", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh1.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh1.git HEAD", "ok": true, "output": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD" }, + { + "kind": "note", + "key": "ls-remote-symref-trunk-first_stdout", + "value": "ref: refs/heads/trunk\tHEAD\n<sha#5>\tHEAD", + "strict": true + }, { "kind": "http", "method": "GET", @@ -944,7 +956,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1059,7 +1071,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1174,7 +1186,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1242,10 +1254,16 @@ { "kind": "git", "name": "ls-remote-symref-main-pushed-first", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh3.git HEAD", "ok": true, "output": "" }, + { + "kind": "note", + "key": "ls-remote-symref-main-pushed-first_stdout", + "value": "", + "strict": true + }, { "kind": "http", "method": "GET", @@ -1296,7 +1314,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1364,9 +1382,15 @@ { "kind": "git", "name": "ls-remote-symref-develop-pushed-second", - "cmd": "git ls-remote --symref http://<admin>:<token>@<host>/acme/fresh3.git HEAD", + "cmd": "git ls-remote --symref http://<creds>@<host>/acme/fresh3.git HEAD", "ok": true, "output": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD" + }, + { + "kind": "note", + "key": "ls-remote-symref-develop-pushed-second_stdout", + "value": "ref: refs/heads/develop\tHEAD\n<sha#6>\tHEAD", + "strict": true } ] } diff --git a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json index 1d8a1dec..adbb47e2 100644 --- a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -394,7 +394,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -496,7 +496,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -669,7 +669,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -771,7 +771,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -840,7 +840,7 @@ { "kind": "git", "name": "ls-remote-pull-refs", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "cmd": "git ls-remote http://<creds>@<host>/acme/life.git refs/pull/*", "ok": true, "output": "<sha#3>\trefs/pull/1/head" }, @@ -962,7 +962,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1064,7 +1064,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1237,7 +1237,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1339,7 +1339,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1418,9 +1418,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -1532,7 +1532,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1634,7 +1634,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1702,7 +1702,7 @@ { "kind": "git", "name": "ls-remote-pull-refs-after-delete", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/life.git refs/pull/*", + "cmd": "git ls-remote http://<creds>@<host>/acme/life.git refs/pull/*", "ok": true, "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" }, @@ -1927,7 +1927,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2029,7 +2029,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2218,7 +2218,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2320,7 +2320,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2503,7 +2503,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2605,7 +2605,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2782,7 +2782,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2884,7 +2884,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3058,7 +3058,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3160,7 +3160,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3350,7 +3350,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3452,7 +3452,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json index 185271dc..34c1648f 100644 --- a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -375,7 +375,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -477,7 +477,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -754,7 +754,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -915,7 +915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1192,7 +1192,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1294,7 +1294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1469,7 +1469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1571,7 +1571,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1732,7 +1732,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1834,7 +1834,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2009,7 +2009,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2111,7 +2111,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2272,7 +2272,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2374,7 +2374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2548,7 +2548,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2650,7 +2650,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2811,7 +2811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2913,7 +2913,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3074,7 +3074,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3176,7 +3176,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3337,7 +3337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3439,7 +3439,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3600,7 +3600,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3702,7 +3702,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3882,7 +3882,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3984,7 +3984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4145,7 +4145,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4247,7 +4247,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4408,7 +4408,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4510,7 +4510,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4671,7 +4671,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4773,7 +4773,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4934,7 +4934,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5036,7 +5036,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5216,7 +5216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5318,7 +5318,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5479,7 +5479,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5581,7 +5581,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5742,7 +5742,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5844,7 +5844,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6005,7 +6005,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6107,7 +6107,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6268,7 +6268,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6370,7 +6370,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6550,7 +6550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6652,7 +6652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6813,7 +6813,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6915,7 +6915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7076,7 +7076,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7178,7 +7178,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7339,7 +7339,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7441,7 +7441,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7602,7 +7602,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7704,7 +7704,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7884,7 +7884,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7986,7 +7986,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8147,7 +8147,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8249,7 +8249,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8410,7 +8410,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8512,7 +8512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8673,7 +8673,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8775,7 +8775,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8936,7 +8936,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9038,7 +9038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9218,7 +9218,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9320,7 +9320,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9481,7 +9481,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9583,7 +9583,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9744,7 +9744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9846,7 +9846,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10109,7 +10109,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10270,7 +10270,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10372,7 +10372,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10546,7 +10546,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10648,7 +10648,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10809,7 +10809,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10911,7 +10911,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11072,7 +11072,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11174,7 +11174,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11335,7 +11335,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11437,7 +11437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11598,7 +11598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11700,7 +11700,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11874,7 +11874,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11976,7 +11976,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12137,7 +12137,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12239,7 +12239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12400,7 +12400,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12502,7 +12502,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12663,7 +12663,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12765,7 +12765,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12926,7 +12926,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13028,7 +13028,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13202,7 +13202,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13304,7 +13304,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13465,7 +13465,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13567,7 +13567,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13830,7 +13830,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13991,7 +13991,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14093,7 +14093,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14254,7 +14254,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14356,7 +14356,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15331,7 +15331,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15518,7 +15518,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15632,7 +15632,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15728,7 +15728,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15841,7 +15841,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json index 2f5992fc..b172c59e 100644 --- a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json @@ -42,9 +42,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -179,22 +179,22 @@ }, { "id": "<id:id#3>", - "name": "all", + "name": "ci", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "all" + "read:repository" ], "created_at": "<ts>", "last_used_at": "<ts>" }, { "id": "<id:id#4>", - "name": "ci", + "name": "all", "sha1": "<token>", "token_last_eight": "<token>", "scopes": [ - "read:repository" + "all" ], "created_at": "<ts>", "last_used_at": "<ts>" @@ -437,7 +437,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://<creds>@localhost:2222/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json index a8aa1205..0dc5398e 100644 --- a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json @@ -115,7 +115,7 @@ { "kind": "git", "name": "read-collab-push-tag", - "cmd": "git push http://carol:<token>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", + "cmd": "git push http://<creds>@<host>/acme/refs.git <sha#1>:refs/tags/v-carol", "ok": false, "output": "remote: \nremote: error: \nremote: error: User permission denied for writing. \nremote: error: \nTo <base>/acme/refs.git\n ! [remote rejected] <sha#1> -> v-carol (pre-receive hook declined)\nerror: failed to push some refs to '<base>/acme/refs.git'", "refusal": [ @@ -127,7 +127,7 @@ { "kind": "git", "name": "ls-remote-all-refs", - "cmd": "git ls-remote http://<admin>:<token>@<host>/acme/refs.git", + "cmd": "git ls-remote http://<creds>@<host>/acme/refs.git", "ok": true, "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" }, @@ -367,7 +367,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -469,7 +469,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json index e40f7ae3..6c43d899 100644 --- a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -219,7 +219,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -498,7 +498,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -698,7 +698,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -800,7 +800,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -982,7 +982,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1084,7 +1084,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1261,7 +1261,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1363,7 +1363,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1579,7 +1579,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1681,7 +1681,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1863,7 +1863,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1965,7 +1965,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2142,7 +2142,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2244,7 +2244,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2441,7 +2441,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2543,7 +2543,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2720,7 +2720,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2822,7 +2822,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3035,7 +3035,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3137,7 +3137,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3349,7 +3349,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3451,7 +3451,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3645,7 +3645,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3747,7 +3747,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3921,7 +3921,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -4023,7 +4023,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json index c4f9dda5..92420568 100644 --- a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json @@ -305,7 +305,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -407,7 +407,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json b/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json index e726dde4..1027649e 100644 --- a/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json +++ b/crates/forge/conformance/fixtures/1.26.2/V-smart-http-bytes.json @@ -192,7 +192,8 @@ "content-type": "application/x-git-upload-pack-result", "cache-control": "max-age=0, private, must-revalidate, no-transform" }, - "body_prefix_hex": "30303038" + "body_prefix_hex": "30303038", + "archive_error": "not a zip or tar.gz" }, { "kind": "note", @@ -210,7 +211,8 @@ "content-type": "application/x-git-upload-pack-result", "cache-control": "max-age=0, private, must-revalidate, no-transform" }, - "body_prefix_hex": "30303038" + "body_prefix_hex": "30303038", + "archive_error": "not a zip or tar.gz" }, { "kind": "note", diff --git a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json index e592a8e1..449846a9 100644 --- a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json @@ -88,7 +88,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -278,7 +278,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -468,7 +468,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -658,7 +658,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -848,7 +848,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1038,7 +1038,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1533,6 +1533,11 @@ "created_at": "<ts>", "last_used_at": "<ts>" } + ], + "volatile": [ + "id", + "name", + "scopes" ] }, { diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py index e820d937..d19a003a 100644 --- a/crates/forge/conformance/run.py +++ b/crates/forge/conformance/run.py @@ -10,6 +10,8 @@ """ import argparse import base64 +import hashlib +import io import json as J import os import re @@ -17,11 +19,13 @@ import shutil import subprocess import sys +import tarfile import tempfile import time import urllib.error import urllib.parse import urllib.request +import zipfile TRACKED_HEADERS = ("content-type", "x-total-count", "link", "www-authenticate", "location") # Every scalar in a recorded body is compared by value after normalization, except volatile ones: @@ -215,8 +219,11 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): if exp["kind"] == "note": if exp["key"] != act["key"]: d.append(("fail", f"note {exp['key']} expected, got {act['key']}")) - elif exp["value"] != act["value"] and exp.get("strict", True): # strict=False notes are informational - d.append(("fail", f"note {exp['key']}: {exp['value']!r} expected, got {act['value']!r}")) + elif exp.get("strict", True): # strict=False notes are informational + ev, av = exp["value"], act["value"] + same = eq_str(ev, av, bij, [], "") if isinstance(ev, str) and isinstance(av, str) else ev == av + if not same: + d.append(("fail", f"note {exp['key']}: {ev!r} expected, got {av!r}")) return d if exp["kind"] == "git": if exp["name"] != act["name"]: @@ -275,6 +282,20 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): eq_str(exp["body_text"], act["body_text"], bij, d, "text body") if "body_prefix_hex" in exp and exp["body_prefix_hex"] != act.get("body_prefix_hex"): d.append(("fail", f"body prefix {exp['body_prefix_hex']} expected, got {act.get('body_prefix_hex')}")) + if "archive" in exp: + if not act.get("archive"): + d.append(("fail", f"archive entries expected, got {act.get('archive_error', 'none')}")) + else: + ea, aa = exp["archive"], act["archive"] + if len(ea) != len(aa): + d.append(("fail", f"archive has {len(aa)} entries, {len(ea)} expected: " + f"{[x['name'] for x in aa][:6]}")) + for x, y in zip(ea, aa): + if not eq_str(x["name"], y["name"], bij, [], ""): + d.append(("fail", f"archive entry {x['name']!r} expected, got {y['name']!r}")) + elif (x["size"], x["sha256"]) != (y["size"], y["sha256"]): + d.append(("fail", f"archive entry {x['name']!r}: size/hash {x['size']}/{(x['sha256'] or '')[:8]} " + f"expected, got {y['size']}/{(y['sha256'] or '')[:8]}")) text = msg_text(act).lower() for w in exp.get("must_contain", []): if w.lower() not in text: @@ -300,6 +321,13 @@ def dep_indexes(spec, expected): EXPECT_KEYS = {"status", "message_contains", "ok", "value", "fields", "ignore_fields", "ignore_body", "skip"} +def ex_ident(ex): + """What an exchange is: `METHOD /path/template`, the git step name, or the note key.""" + if ex["kind"] == "http": + return f"{ex['method']} {ex['path']}" + return ex["name"] if ex["kind"] == "git" else ex["key"] + + def load_departures(path, scenario_ids): """Read and validate departures.json; any problem is a load error (SystemExit).""" deps = J.load(open(path)) @@ -319,6 +347,8 @@ def load_departures(path, scenario_ids): errs.append(f"{where}: unknown expect keys {sorted(set(e) - EXPECT_KEYS)}") if not d.get("reason"): errs.append(f"{where}: reason is required") + if d.get("kind") not in ("http", "git", "note"): + errs.append(f"{where}: kind must be http, git or note") sts = e.get("status") sts = sts if isinstance(sts, list) else ([sts] if sts is not None else []) if (any(x >= 400 for x in sts) or e.get("ok") is False) and not e.get("message_contains"): @@ -327,14 +357,19 @@ def load_departures(path, scenario_ids): idx = None if isinstance(spec, int) and not isinstance(spec, bool): idx = [spec] - if not d.get("label"): - errs.append(f"{where}: a single-index entry needs a label") + m = d.get("match") + if not m: + errs.append(f"{where}: a single-index entry needs `match` (METHOD /path, git step name or note key)") + elif d.get("kind") == "http" and not re.match(r"^[A-Z]+ /", m): + errs.append(f"{where}: http `match` must look like 'METHOD /path'") elif isinstance(spec, (list, str)) and (isinstance(spec, list) or re.fullmatch(r"\d+-\d+", spec)): idx = dep_indexes(spec, []) - if len(d.get("labels") or []) != len(idx): - errs.append(f"{where}: a range or list needs `labels` with one entry per exchange ({len(idx)})") + if len(d.get("matches") or []) != len(idx): + errs.append(f"{where}: a range or list needs `matches` with one entry per exchange ({len(idx)})") elif not isinstance(spec, str): errs.append(f"{where}: bad exchange {spec!r}") + elif d.get("kind") == "http": + errs.append(f"{where}: a name can only select a git step or a note") for i in idx or []: if (d["scenario"], i) in seen: errs.append(f"{where}: duplicate entry for {d['scenario']}#{i} (also {seen[(d['scenario'], i)]})") @@ -355,13 +390,17 @@ def dget(b, path): return b -def apply_override(exp, act, ov, bij): +def apply_override(exp, act, ov, bij, match=None): """Check `act` against a departure instead of the recorded exchange. - Targeted checks (status, message_contains, ok, value, fields) always run. The recorded body is still compared - strictly when the entry only names `ignore_fields`/`fields` (those keys are left out), so a departure never - widens more than it says.""" + The exchange must be the one the entry names (kind and `match`), skip included. Targeted checks (status, + message_contains, ok, value, fields) run next; message_contains applies to refusals (status >= 400, or any + git output) and `fields` to successful bodies. The recorded body is still compared strictly when the entry + only names `ignore_fields`/`fields`, so a departure never widens more than it says.""" e, why, d = ov["expect"], ov.get("reason", ""), [] + match = match if match is not None else ov.get("match") + if act["kind"] != ov["kind"] or (match and not eq_str(match, ex_ident(act), bij, [], "")): + return [("fail", f"departure for {ov['kind']} {match!r} applied to a different exchange: {ex_ident(act)!r}")] if e.get("skip"): return [("honoured", f"skipped: {why}")] if act["kind"] == "note": @@ -380,14 +419,16 @@ def apply_override(exp, act, ov, bij): if sts is not None and act["status"] not in sts: d.append(("fail", f"unexpected: status {sts} expected, got {act['status']}: {msg_text(act)[:160]!r}")) txt = msg_text(act).lower() - for w in e.get("message_contains", []): - if w.lower() not in txt: - d.append(("fail", f"unexpected: message lacks {w!r}: {txt[:160]!r}")) - for k, v in (e.get("fields") or {}).items(): - body = act.get("body") - got = len(body) if k == "$len" and isinstance(body, list) else dget(body, k) - if got != v: - d.append(("fail", f"unexpected: {k} {v!r} expected, got {got!r}")) + if act["status"] >= 400: + for w in e.get("message_contains", []): + if w.lower() not in txt: + d.append(("fail", f"unexpected: message lacks {w!r}: {txt[:160]!r}")) + if act["status"] < 400: + for k, v in (e.get("fields") or {}).items(): + body = act.get("body") + got = len(body) if k == "$len" and isinstance(body, list) else dget(body, k) + if got != v: + d.append(("fail", f"unexpected: {k} {v!r} expected, got {got!r}")) pins = list((e.get("fields") or {})) if not e.get("ignore_body") and sts is None and (e.get("ignore_fields") or pins): skip = list(e.get("ignore_fields") or []) + [k for k in pins if k != "$len"] @@ -454,7 +495,7 @@ def scrub(self, s): return re.sub(r"\b%s\b" % re.escape(self.admin_user), "<admin>", s) def ns(self, s): - s = self.scrub(s) + s = re.sub(r"(://)[^/@\s\"']+@", r"\1<creds>@", self.scrub(s)) # pkt-line adverts glue a 4-hex length in front of the id ("0146<sha> HEAD"), so \b misses it s = re.sub(r"[0-9a-f]{40}(?= (?:HEAD|refs/|capabilities))", lambda m: self.sha_ph(m.group(0)), s) s = SHA_RE.sub(lambda m: self.sha_ph(m.group(0)), s) @@ -521,7 +562,7 @@ def new_password(self): # -- HTTP def call(self, method, path, json=None, as_="admin", expect=None, must_contain=None, volatile=None, headers=None, data=None, api=True, binary=False, rec=True, track=(), - retry_while=None, retry_s=90, no_retry=False, settle_keys=None): + retry_while=None, retry_s=90, no_retry=False, settle_keys=None, tags=()): full = ("/api/v1" + path) if api else path hdrs = {"Accept": "application/json", "User-Agent": "sc-forge-conformance"} p = self.principals[as_] @@ -589,11 +630,15 @@ def get(b, k): ex["body"] = self.nj(r.json) elif binary: ex["body_prefix_hex"] = r.data[:4].hex() + if r.status == 200: + ex.update(self.archive_entries(r.data)) else: ex["body_text"] = self.ns(r.text[:3000]).replace("\x00", "\\0") for k, v in (("must_contain", must_contain), ("volatile", volatile)): if v: ex[k] = list(v) + if tags: + ex["tags"] = list(tags) if unsettled: ex["unsettled"] = True if first_differs: @@ -601,12 +646,31 @@ def get(b, k): self.push_ex(ex) if unsettled and self.mode == "record": raise SetupError(f"{method} {full}: value did not settle within 25 s") - if expect is not None: + # `expect` guards the scenario's own preconditions. A recorded exchange is the thing under test, so in + # check mode a different answer is a diff to report, never an abort. + if expect is not None and (self.mode == "record" or not rec): ok = expect if isinstance(expect, (list, tuple, set)) else [expect] if r.status not in ok: raise SetupError(f"{method} {full}: expected {sorted(ok)}, got {r.status}: {r.text[:300]}") return r + def archive_entries(self, data): + """Normalized entry names, sizes and content hashes of a zip or tar.gz, so a bare signature fails.""" + try: + if data[:2] == b"PK": + z = zipfile.ZipFile(io.BytesIO(data)) + ents = [(i.filename, 0 if i.is_dir() else i.file_size, None if i.is_dir() else hashlib.sha256(z.read(i)).hexdigest()) + for i in z.infolist()] + elif data[:2] == b"\x1f\x8b": + t = tarfile.open(fileobj=io.BytesIO(data), mode="r:gz") + ents = [(m.name, 0 if m.isdir() else m.size, None if m.isdir() else hashlib.sha256(t.extractfile(m).read()).hexdigest()) + for m in t.getmembers() if m.isfile() or m.isdir()] + else: + return {"archive_error": "not a zip or tar.gz"} + except Exception as e: # noqa: BLE001 + return {"archive_error": f"unreadable archive: {type(e).__name__}"} + return {"archive": sorted(({"name": self.ns(n), "size": sz, "sha256": h} for n, sz, h in ents), key=lambda x: x["name"])} + # -- git def git_url(self, repo, who="admin", user=None, secret=None, org="acme"): p = self.principals[who] @@ -616,15 +680,19 @@ def git_url(self, repo, who="admin", user=None, secret=None, org="acme"): return f"{host[0]}://{auth}{host[1]}/{org}/{repo}.git" def git(self, args, cwd=None, name=None, rec=True, ok=None, must_contain=None, extra_header=None, - env_extra=None): + env_extra=None, note_stdout=False): pre = ["-c", "credential.helper=", "-c", "advice.detachedHead=false", "-c", "init.defaultBranch=main", "-c", "user.name=Conf", "-c", "user.email=conf@example.invalid", "-c", "commit.gpgsign=false"] if extra_header: pre += ["-c", "http.extraHeader=" + extra_header[1]] + self.secrets.update({extra_header[1], extra_header[1].split()[-1]}) env = {"PATH": os.environ.get("PATH", ""), "HOME": self.tmp + "/home", "GIT_CONFIG_NOSYSTEM": "1", "GIT_CONFIG_GLOBAL": "/dev/null", "GIT_TERMINAL_PROMPT": "0", "LC_ALL": "C"} env.update(env_extra or {}) - p = subprocess.run(["git"] + pre + args, cwd=cwd, env=env, capture_output=True, timeout=180) + try: + p = subprocess.run(["git"] + pre + args, cwd=cwd, env=env, capture_output=True, timeout=180) + except subprocess.TimeoutExpired: # str(e) would carry the command line with credentials + raise SetupError(f"git {' '.join(self.ns(a) for a in args)}: timed out after 180 s") from None out = (p.stdout + p.stderr).decode("utf-8", "replace") if rec: cmd = "git " + (f"-c http.extraHeader=<{extra_header[0]}> " if extra_header else "") + " ".join(args) @@ -635,13 +703,15 @@ def git(self, args, cwd=None, name=None, rec=True, ok=None, must_contain=None, e if p.returncode != 0: ex["refusal"] = refusal_lines(ex["output"]) self.push_ex(ex) + if note_stdout: + self.note(f"{ex['name']}_stdout", self.ns(p.stdout.decode("utf-8", "replace").strip())) want = ok if ok is not None else (None if rec else True) if want is not None and (p.returncode == 0) != want: raise SetupError(f"git {' '.join(self.ns(a) for a in args)}: exit {p.returncode}: {self.ns(out)[-400:]}") return p.returncode == 0, out.strip() def wc(self, repo, who="admin", org="acme"): - path = f"{self.tmp}/wc-{org}-{repo}" + path = f"{self.tmp}/wc-{org}-{repo}-{who}" # one clone per principal: `origin` embeds that principal's token if not os.path.isdir(path): self.git(["clone", self.git_url(repo, who, org=org), path], rec=False) return path @@ -744,16 +814,38 @@ def deco(fn): return deco +SECRET_PATTERNS = (re.compile(r"://[^/@\s\"']+:[^/@\s\"']*@"), re.compile(r"Authorization: ?(?:Basic|Bearer|token) +[A-Za-z0-9+/=_.-]{6,}", re.I), + re.compile(r"(?<![0-9a-f])[0-9a-f]{40}(?![0-9a-f])")) + + +def scan_fixtures(out, secret_values): + """Fail on anything credential-shaped in the recorded files: URL userinfo, auth headers, raw 40-hex ids, known secrets.""" + hits = [] + for f in sorted(os.listdir(out)): + if not f.endswith(".json"): + continue + text = open(os.path.join(out, f)).read() + for pat in SECRET_PATTERNS: + m = pat.search(text) + if m: + hits.append(f"{f}: matches {pat.pattern[:40]!r}: {m.group(0)[:30]!r}") + for sec in secret_values: + if len(sec) >= 8 and sec in text: + hits.append(f"{f}: contains a secret value ({sec[:3]}...)") + return hits + + def run_all(c, only, out=None, fixtures=None, departures=()): + """Run every scenario in order (they read earlier state); `only` filters what is reported/written.""" summary = [] for sid, slug, needs_base, fn in SCENARIOS: - if only and sid not in only: - continue + selected = not only or sid in only fname = f"{sid}-{slug}.json" c.ex, c.cursor, c.diffs = [], 0, [] c.reset_scenario() - c.expected, skip = [], None - if c.mode == "check": + c.expected, skip, stale = [], None, [] + c.overrides = {} + if c.mode == "check" and selected: fp = os.path.join(fixtures, fname) if not os.path.exists(fp): summary.append((sid, slug, "FAIL", ["no fixture " + fname])) @@ -761,7 +853,6 @@ def run_all(c, only, out=None, fixtures=None, departures=()): fx = J.load(open(fp)) c.expected = fx["exchanges"] skip = fx.get("error") - c.overrides, stale = {}, [] for dep in departures: if dep["scenario"] != sid: continue @@ -769,18 +860,19 @@ def run_all(c, only, out=None, fixtures=None, departures=()): bad = [i for i in idx if not 0 <= i < len(c.expected)] if not idx or bad: stale.append(f"stale departure {dep['exchange']!r}: no such exchange in {fname} ({dep.get('reason', '')})") - labels = dep.get("labels") or ([dep["label"]] if dep.get("label") and len(idx) == 1 else [None] * len(idx)) + matches = dep.get("matches") or ([dep["match"]] if dep.get("match") and len(idx) == 1 else [None] * len(idx)) for k, i in enumerate(idx): if i in bad: continue - if labels[k] and labels[k] not in ex_label(c.expected[i]): - stale.append(f"stale departure #{i}: fixture exchange is {ex_label(c.expected[i])!r}, " - f"departure says {labels[k]!r}") + got = ex_ident(c.expected[i]) + if (matches[k] and matches[k] != got) or c.expected[i]["kind"] != dep["kind"]: + stale.append(f"stale departure #{i}: fixture exchange is {c.expected[i]['kind']} {got!r}, " + f"departure says {dep['kind']} {matches[k]!r}") continue if i in c.overrides: stale.append(f"duplicate departure for #{i} ({dep.get('reason', '')})") continue - c.overrides[i] = dep + c.overrides[i] = dict(dep, match=matches[k] or got) t0 = time.time() err = None try: @@ -790,6 +882,8 @@ def run_all(c, only, out=None, fixtures=None, departures=()): except Exception as e: # noqa: BLE001 - scenario failures are data err = c.ns(f"{type(e).__name__}: {e}")[:1500] dt = time.time() - t0 + if not selected: + continue if c.mode == "record": os.makedirs(out, exist_ok=True) with open(os.path.join(out, fname), "w") as f: @@ -828,12 +922,17 @@ def run_all(c, only, out=None, fixtures=None, departures=()): def cmd_run(a): - deps = load_departures(a.departures, {x[0] for x in SCENARIOS}) if getattr(a, "departures", None) else [] + ids = {x[0] for x in SCENARIOS} + only = set(a.only.split(",")) if a.only else None + if only and only - ids: + print(f"unknown scenario id(s) {sorted(only - ids)}; known: {sorted(ids)}", file=sys.stderr) + return 2 + deps = load_departures(a.departures, ids) if getattr(a, "departures", None) else [] c = Ctx(a.base_url, a.admin_token, a.cmd) c.strict_first_read = getattr(a, "strict_first_read", False) c.verbose = a.verbose - only = set(a.only.split(",")) if a.only else None t0 = time.time() + leaks = [] try: if a.cmd == "record": ver = c.call("GET", "/version", rec=False).json @@ -842,6 +941,7 @@ def cmd_run(a): with open(os.path.join(a.out, "meta.json"), "w") as f: J.dump({"server_version": ver, "scenarios": sorted(x for x in os.listdir(a.out) if x.endswith(".json") and x != "meta.json")}, f, indent=2) f.write("\n") + leaks = scan_fixtures(a.out, c.secrets) else: summary = run_all(c, only, fixtures=a.fixtures, departures=deps) finally: @@ -855,8 +955,10 @@ def cmd_run(a): for ln in lines: print(ln if a.cmd == "check" else f" {ln}") bad += st in ("FAIL", "ERROR") - print(f"\n{len(summary) - bad}/{len(summary)} scenarios ok in {time.time() - t0:.0f}s") - return 1 if bad else 0 + for h in leaks: + print(f"LEAK {h}") + print(f"\n{len(summary) - bad}/{len(summary)} scenarios ok in {time.time() - t0:.0f}s" + (f"; {len(leaks)} credential-shaped value(s) in the fixtures" if leaks else "")) + return 1 if bad or leaks else 0 def load_dir(d): @@ -872,6 +974,7 @@ def cmd_diff(a): for f in sorted(set(A) | set(B)): if f not in A or f not in B: print(f"{f}: only in {'A' if f in A else 'B'}") + bad += 1 continue ea, eb = A[f]["exchanges"], B[f]["exchanges"] print(f"{f}: {len(ea)} vs {len(eb)} exchanges" + (f" (errors: A={A[f]['error']!r} B={B[f]['error']!r})" if A[f]["error"] or B[f]["error"] else "")) @@ -887,7 +990,8 @@ def cmd_diff(a): print(f" #{i:02d} {ex_label(x)}") for lv, t in ds: print(f" {lv}: {t}") - return 0 + print(f"{bad} differing exchange(s)") + return 1 if bad or {f for f in A} ^ {f for f in B} else 0 def cmd_show(a): @@ -924,7 +1028,7 @@ def main(): p = sub.add_parser(name) p.add_argument("--base-url", required=True) p.add_argument("--admin-token", required=True) - p.add_argument("--only", help="comma-separated scenario ids, e.g. A,F") + p.add_argument("--only", help="comma-separated scenario ids, e.g. A,F: all scenarios still run, only these are reported") p.add_argument("-v", "--verbose", action="store_true") if name == "record": p.add_argument("--out", required=True) @@ -990,10 +1094,12 @@ def sc_users(c): c.call("GET", "/orgs/nobody-org") c.call("GET", f"/users/{c.admin_user}/orgs/acme/permissions") c.call("GET", "/users/alice/orgs/acme/permissions") + # teams: a non-goal for sc-forge, so these exchanges are tagged and tolerate a server without them team = c.call("POST", "/orgs/acme/teams", {"name": "devs", "permission": "read", "includes_all_repositories": False, - "units": ["repo.code", "repo.pulls"]}, expect=201, rec=False).json - c.call("PUT", f"/teams/{team['id']}/members/carol", expect=204, rec=False) - c.call("GET", "/users/carol/orgs/acme/permissions") + "units": ["repo.code", "repo.pulls"]}, expect=201, tags=["team"]) + tid = team.json.get("id", 0) if team.is_json and isinstance(team.json, dict) else 0 + c.call("PUT", f"/teams/{tid}/members/carol", expect=204, tags=["team"]) + c.call("GET", "/users/carol/orgs/acme/permissions", tags=["team"]) # tokens c.mk_token("alice", "ci", ["read:repository"], "alice-ro", rec=True) r = c.mk_token("alice", "tmp", ["read:repository", "write:repository"], "alice-tmp", rec=True) @@ -1679,7 +1785,7 @@ def sc_default_branch(c): c.call("PATCH", R, {"default_branch": "nope"}) c.call("PATCH", R, {"default_branch": "dev"}) c.call("GET", R) - c.git(["ls-remote", "--symref", c.git_url("dflt"), "HEAD"], name="ls-remote-symref-after-change") + c.git(["ls-remote", "--symref", c.git_url("dflt"), "HEAD"], name="ls-remote-symref-after-change", note_stdout=True) c.call("GET", R + "/branches") c.call("GET", R + "/contents") d = c.tmp + "/ndflt" @@ -1693,7 +1799,7 @@ def sc_default_branch(c): repo_state(c, "/repos/acme/fresh1", "fresh1_before_push") c.push_branch("fresh1", "trunk", {"t.txt": "t\n"}, base=None) repo_state(c, "/repos/acme/fresh1", "fresh1_after_trunk") - c.git(["ls-remote", "--symref", c.git_url("fresh1"), "HEAD"], name="ls-remote-symref-trunk-first") + c.git(["ls-remote", "--symref", c.git_url("fresh1"), "HEAD"], name="ls-remote-symref-trunk-first", note_stdout=True) c.call("GET", "/repos/acme/fresh1/branches") c.mk_repo("fresh2", auto_init=False) c.push_branch("fresh2", "main", {"t.txt": "t\n"}, base=None) @@ -1702,10 +1808,10 @@ def sc_default_branch(c): repo_state(c, "/repos/acme/fresh3", "fresh3_before_push") c.push_branch("fresh3", "main", {"t.txt": "t\n"}, base=None) repo_state(c, "/repos/acme/fresh3", "fresh3_after_main") - c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-main-pushed-first") + c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-main-pushed-first", note_stdout=True) c.push_branch("fresh3", "develop", {"u.txt": "u\n"}, base="origin/main") repo_state(c, "/repos/acme/fresh3", "fresh3_after_develop") - c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-develop-pushed-second") + c.git(["ls-remote", "--symref", c.git_url("fresh3"), "HEAD"], name="ls-remote-symref-develop-pushed-second", note_stdout=True) @scenario("O", "pr-head-lifecycle") @@ -2103,7 +2209,7 @@ def sc_auth_forms(c): c.call("GET", "/user", as_="siteowner-pw") r = c.call("POST", "/users/bot/tokens", {"name": "by-site-admin-password", "scopes": ["read:repository"]}, as_="siteowner-pw") - c.call("GET", "/users/bot/tokens", as_="siteowner-pw") + c.call("GET", "/users/bot/tokens", as_="siteowner-pw", volatile=["id", "name", "scopes"]) # same-second tie order c.call("POST", "/users/bot/tokens", {"name": "by-admin-token", "scopes": ["read:repository"]}, as_="admin") # a read-only token used as the Basic password mints what? c.principals["alice-ro-as-password"] = {"kind": "basic", "user": "alice", "secret": c.principals["alice-ro"]["secret"]} From d9cf6f1b51a939a07a55c4fa1cb9ea04727f980e Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 16:56:33 +0300 Subject: [PATCH 12/23] docs(forge): define recovery for interrupted repository deletion --- docs/superpowers/specs/2026-10-22-p38-forge-design.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 398befcc..d8742070 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -408,6 +408,14 @@ answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. repo's registered children, rename the directory into `trash/`, delete the row, then remove the trash. Hooks verify `FORGE_GENERATION` against the database so a straggler fails closed. + The delete is a journaled sequence, so every crash point has a defined + recovery, run by the startup reconciler: a `deleting` row whose directory still + exists resumes at the rename (children are gone after a restart); a `deleting` + row whose directory is already in `trash/` finishes by deleting the row; a + `trash/<id>.git` with no row (crash after the row delete, or a failed + removal) is removed; and a `deleting` row with neither directory is deleted. + A repository name is reusable as soon as its row is gone, because directories + are addressed by immutable id. - **Default branch:** PATCH updates the row and bare `HEAD` together; the reconciler repairs a mismatch. A repo is `empty` when `HEAD` does not resolve (computed live). Names: lower-case uniqueness enforced by a database index; From ad2d9cf7557448ada0efcf9131d7d7359a099b46 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 17:21:40 +0300 Subject: [PATCH 13/23] test(forge): departures keep comparing headers and body; compare url and content fields by value A departure now replaces only what it names: recorded headers and every unlisted JSON field are still compared, and only an explicit ignore_body drops the body (entries that cross the 2xx/4xx boundary must say so; ignore_headers covers headers that cannot exist on the other side). The type-only set for message, url and *_url is replaced by an explicit allowlist; top-level error text keeps its own comparison. Database counters in URL fragments are normalized; ssh://git@ is no longer scrubbed. Fixtures re-recorded. --- crates/forge/conformance/README.md | 25 +- crates/forge/conformance/departures.json | 136 +++++++---- .../fixtures/1.22.6/B-users-orgs-tokens.json | 2 +- .../conformance/fixtures/1.22.6/C-repos.json | 36 +-- .../fixtures/1.22.6/D-empty-repo.json | 2 +- .../fixtures/1.22.6/E-history-reads.json | 2 +- .../conformance/fixtures/1.22.6/F-pulls.json | 144 +++++------ .../conformance/fixtures/1.22.6/G-merge.json | 64 ++--- .../fixtures/1.22.6/H-statuses.json | 20 +- .../fixtures/1.22.6/K-visibility-probing.json | 64 ++--- .../fixtures/1.22.6/L-force-private.json | 20 +- .../conformance/fixtures/1.22.6/M-names.json | 34 +-- .../fixtures/1.22.6/N-default-branch.json | 20 +- .../fixtures/1.22.6/O-pr-head-lifecycle.json | 48 ++-- .../fixtures/1.22.6/P-pagination.json | 226 +++++++++--------- .../fixtures/1.22.6/R-token-scope-edges.json | 2 +- .../fixtures/1.22.6/S-ref-pushes.json | 4 +- .../fixtures/1.22.6/T-merge-outcomes.json | 56 ++--- .../fixtures/1.22.6/U-status-check-edges.json | 4 +- .../fixtures/1.22.6/X-auth-forms.json | 14 +- .../fixtures/1.26.2/B-users-orgs-tokens.json | 10 +- .../conformance/fixtures/1.26.2/C-repos.json | 44 ++-- .../fixtures/1.26.2/D-empty-repo.json | 20 +- .../fixtures/1.26.2/E-history-reads.json | 16 +- .../conformance/fixtures/1.26.2/F-pulls.json | 96 ++++---- .../conformance/fixtures/1.26.2/G-merge.json | 76 +++--- .../fixtures/1.26.2/H-statuses.json | 26 +- .../fixtures/1.26.2/I-branch-protection.json | 12 +- .../fixtures/1.26.2/J-smart-http.json | 4 +- .../fixtures/1.26.2/K-visibility-probing.json | 90 +++---- .../fixtures/1.26.2/L-force-private.json | 24 +- .../conformance/fixtures/1.26.2/M-names.json | 32 +-- .../fixtures/1.26.2/N-default-branch.json | 20 +- .../fixtures/1.26.2/O-pr-head-lifecycle.json | 52 ++-- .../fixtures/1.26.2/P-pagination.json | 226 +++++++++--------- .../fixtures/1.26.2/R-token-scope-edges.json | 10 +- .../fixtures/1.26.2/S-ref-pushes.json | 4 +- .../fixtures/1.26.2/T-merge-outcomes.json | 56 ++--- .../fixtures/1.26.2/U-status-check-edges.json | 4 +- .../fixtures/1.26.2/X-auth-forms.json | 14 +- crates/forge/conformance/run.py | 57 +++-- 41 files changed, 947 insertions(+), 869 deletions(-) diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md index 80032b23..16411afb 100644 --- a/crates/forge/conformance/README.md +++ b/crates/forge/conformance/README.md @@ -62,9 +62,15 @@ observations called notes). Exchange N of the run is compared with exchange N of (`content-type`, `x-total-count`, `link`, `www-authenticate`, `location`, plus any a call tracks), and the body. - JSON bodies: every recorded key must exist with the same type, extra keys are allowed, arrays must - have the same length, and every scalar is compared by **value** after normalization. Only volatile - values are compared by type: `message` and `errors` (text), every `url`/`*_url` key (they carry the - host), a repo `size`, and paths a call lists in `volatile=[...]`. + have the same length, and every scalar is compared by **value** after normalization. That includes + commit, review and status `message`/`body`/`description` content and every `url`/`*_url` (html_url, + clone_url, ssh_url, commit_url, target_url, ...) once the base URL is `<base>`, so a response that names + the wrong repository fails. Only an explicit allowlist (`DEFAULT_VOLATILE` in `run.py`, with a comment + per entry) and the dotted paths a call lists in `volatile=[...]` are compared by type: `avatar_url` + (avatar hash), `mergeable` (flips while a PR is checked), `language` and the open-PR/issue counters + (computed asynchronously), repo `size`. The top-level `message`/`errors` of an HTTP error response are + compared as text (next bullet). Database counters inside URL fragments (`#issuecomment-7`) are + normalized to placeholders. - Error text: for every recorded exchange with status >= 400 whose body has `message` (or a non-empty `errors`), the actual text must equal the recorded text after normalization: lower case, and only id-shaped trailing details dropped (`[uid: 0, name: ]`, `[id: x, rel_path: ]`, numeric `id:`/`issue_id:` @@ -107,9 +113,16 @@ success, ...), as well as every deliberate sc-forge difference. including for `skip`. - `expect` keys: `status` (number or list), `message_contains`, `ok` (git), `value` (note; works for `strict=False` notes too), `fields` (pin body values by dotted path, `$len` pins an array length), - `ignore_fields` (compare the recorded body strictly except these keys), `ignore_body` (compare only the - checks above) and `skip` (only when unavoidable; say why in `reason`). -- An entry with `fields` or `ignore_fields` and no `status` still compares the rest of the body strictly. + `ignore_fields` (dotted paths left out of the body comparison), `ignore_headers` (recorded headers left out), + `ignore_body` (no body comparison at all) and `skip` (only when unavoidable; say why in `reason`). +- A departure replaces only what it names. Whatever it sets (`status`, `fields`, `message_contains`, ...), the + recorded headers (minus `ignore_headers`) and every JSON field not in `ignore_fields` or `fields` are still + compared, and a top-level error `message` is checked by `message_contains` instead of the recorded text. + Only an explicit `ignore_body` drops the body comparison. If a departure moves the status across the + 2xx/4xx boundary (for example 201 to 422) the recorded body cannot match, so the run fails with + "needs ignore_body with a reason" until the entry says so; the generator adds `ignore_body` and the reason + in that case, plus `ignore_headers` for the headers that cannot exist on the other side (`location`, + `x-total-count`, `link`, and `content-type` of a redirect). - Load errors (the run aborts): unknown scenario id, unknown `expect` key, missing `reason`, `kind` or `match`, a range or list without matching `matches`, two entries for one (scenario, index), and any entry that expects a refusal (`status` >= 400 or `ok:false`) without `message_contains`, so a departure cannot hide diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json index 02898b94..46773277 100644 --- a/crates/forge/conformance/departures.json +++ b/crates/forge/conformance/departures.json @@ -34,9 +34,10 @@ "status": 422, "message_contains": [ "merge" - ] + ], + "ignore_body": true }, - "reason": "sc-forge supports only Do=merge, not squash (reword message_contains once sc-forge's text is fixed)" + "reason": "sc-forge supports only Do=merge, not squash (reword message_contains once sc-forge's text is fixed) [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "G", @@ -91,9 +92,10 @@ "status": 422, "message_contains": [ "merge" - ] + ], + "ignore_body": true }, - "reason": "sc-forge supports only Do=merge, not rebase (reword message_contains once sc-forge's text is fixed)" + "reason": "sc-forge supports only Do=merge, not rebase (reword message_contains once sc-forge's text is fixed) [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "G", @@ -148,9 +150,10 @@ "status": 422, "message_contains": [ "merge" - ] + ], + "ignore_body": true }, - "reason": "sc-forge supports only Do=merge, not rebase-merge (reword message_contains once sc-forge's text is fixed)" + "reason": "sc-forge supports only Do=merge, not rebase-merge (reword message_contains once sc-forge's text is fixed) [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "G", @@ -191,9 +194,10 @@ "status": 422, "message_contains": [ "merge" - ] + ], + "ignore_body": true }, - "reason": "sc-forge supports only Do=merge, not fast-forward-only (reword message_contains once sc-forge's text is fixed)" + "reason": "sc-forge supports only Do=merge, not fast-forward-only (reword message_contains once sc-forge's text is fixed) [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "G", @@ -332,7 +336,8 @@ "message_contains": [ "conflict", "unrelated" - ] + ], + "ignore_body": true }, "reason": "sc-forge sends {\"message\":\"Merge conflict: unrelated histories\"}; Gitea sends a {Style,StdOut,StdErr,Err} body (1.26.2 truncates it)" }, @@ -589,9 +594,10 @@ ], "message_contains": [ "password" - ] + ], + "ignore_body": true }, - "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "R", @@ -605,9 +611,13 @@ ], "message_contains": [ "password" + ], + "ignore_body": true, + "ignore_headers": [ + "x-total-count" ] }, - "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused" + "reason": "sc-forge requires the user's password on /users/{u}/tokens routes; a token is refused [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "X", @@ -718,9 +728,10 @@ "status": 422, "message_contains": [ "state" - ] + ], + "ignore_body": true }, - "reason": "sc-forge rejects the unknown status state 'bogus'" + "reason": "sc-forge rejects the unknown status state 'bogus' [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "H", @@ -731,9 +742,10 @@ "status": 422, "message_contains": [ "state" - ] + ], + "ignore_body": true }, - "reason": "sc-forge rejects the unknown status state ''" + "reason": "sc-forge rejects the unknown status state '' [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "H", @@ -744,9 +756,10 @@ "status": 422, "message_contains": [ "state" - ] + ], + "ignore_body": true }, - "reason": "sc-forge rejects the unknown status state 'bogus'" + "reason": "sc-forge rejects the unknown status state 'bogus' [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "H", @@ -774,7 +787,7 @@ "total_count": 0 } }, - "reason": "the only status on this commit was refused: no statuses, combined state pending (1.26.2 behaviour)" + "reason": "the only status on this commit was refused: no statuses, combined state pending (1.26.2 behaviour); ignore_body: the recorded body lists that status" }, { "scenario": "H", @@ -808,7 +821,7 @@ "$len": 0 } }, - "reason": "the status list is empty because the bogus state was refused" + "reason": "the status list is empty because the bogus state was refused; ignore_body: the recorded body is a one-element list" }, { "scenario": "M", @@ -819,9 +832,10 @@ "status": 422, "message_contains": [ "rename" - ] + ], + "ignore_body": true }, - "reason": "sc-forge does not rename repos" + "reason": "sc-forge does not rename repos [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "M", @@ -833,9 +847,13 @@ "ignore_body": true, "fields": { "name": "rename-me" - } + }, + "ignore_headers": [ + "location", + "content-type" + ] }, - "reason": "the old name still resolves (no rename)" + "reason": "the old name still resolves (no rename) [ignore_body: the recorded 307 body has another shape than the departed answer]" }, { "scenario": "M", @@ -846,9 +864,10 @@ "status": 404, "message_contains": [ "not found" - ] + ], + "ignore_body": true }, - "reason": "the new name does not exist" + "reason": "the new name does not exist [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "M", @@ -859,9 +878,14 @@ "status": 404, "message_contains": [ "not found" + ], + "ignore_body": true, + "ignore_headers": [ + "location", + "content-type" ] }, - "reason": "no access, no redirect: 404 as for any private repo" + "reason": "no access, no redirect: 404 as for any private repo [ignore_body: the recorded 307 body has another shape than the departed answer]" }, { "scenario": "M", @@ -870,9 +894,13 @@ "match": "GET /acme/rename-me.git/info/refs?service=git-upload-pack", "expect": { "status": 200, - "ignore_body": true + "ignore_body": true, + "ignore_headers": [ + "location", + "content-type" + ] }, - "reason": "info/refs of the old name works directly (no redirect)" + "reason": "info/refs of the old name works directly (no redirect) [ignore_body: the recorded 307 body has another shape than the departed answer]" }, { "scenario": "M", @@ -909,9 +937,10 @@ "status": 404, "message_contains": [ "not found" - ] + ], + "ignore_body": true }, - "reason": "the new name does not exist" + "reason": "the new name does not exist [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "M", @@ -922,9 +951,10 @@ "status": 404, "message_contains": [ "not found" - ] + ], + "ignore_body": true }, - "reason": "the new name does not exist" + "reason": "the new name does not exist [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "N", @@ -935,9 +965,10 @@ "status": 422, "message_contains": [ "branch" - ] + ], + "ignore_body": true }, - "reason": "sc-forge rejects a default branch that does not exist" + "reason": "sc-forge rejects a default branch that does not exist [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "O", @@ -1010,9 +1041,10 @@ ], "message_contains": [ "not" - ] + ], + "ignore_body": true }, - "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text) [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "B", @@ -1027,9 +1059,10 @@ ], "message_contains": [ "not" - ] + ], + "ignore_body": true }, - "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + "reason": "teams are a non-goal in sc-forge (words in message_contains are placeholders for its text) [ignore_body: the recorded 204 body has another shape than the departed answer]" }, { "scenario": "B", @@ -1046,9 +1079,10 @@ ], "fields": { "can_read": false - } + }, + "ignore_body": true }, - "reason": "carol is not a team member without teams: no read permission via the org (200 all false or 404). teams are a non-goal in sc-forge (words in message_contains are placeholders for its text)" + "reason": "carol is not a team member without teams: no read permission via the org (200 all false or 404). teams are a non-goal in sc-forge (words in message_contains are placeholders for its text) [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "X", @@ -1059,9 +1093,10 @@ "status": 401, "message_contains": [ "auth" - ] + ], + "ignore_body": true }, - "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "X", @@ -1072,9 +1107,10 @@ "status": 401, "message_contains": [ "auth" - ] + ], + "ignore_body": true }, - "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text [ignore_body: the recorded 200 body has another shape than the departed answer]" }, { "scenario": "X", @@ -1085,9 +1121,10 @@ "status": 401, "message_contains": [ "auth" - ] + ], + "ignore_body": true }, - "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text [ignore_body: the recorded 201 body has another shape than the departed answer]" }, { "scenario": "X", @@ -1098,8 +1135,9 @@ "status": 401, "message_contains": [ "auth" - ] + ], + "ignore_body": true }, - "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text" + "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text [ignore_body: the recorded 200 body has another shape than the departed answer]" } ] \ No newline at end of file diff --git a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json index 4a4439df..4f27012e 100644 --- a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json @@ -674,7 +674,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/C-repos.json b/crates/forge/conformance/fixtures/1.22.6/C-repos.json index 2e58f331..e3a8010f 100644 --- a/crates/forge/conformance/fixtures/1.22.6/C-repos.json +++ b/crates/forge/conformance/fixtures/1.22.6/C-repos.json @@ -61,7 +61,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -193,7 +193,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -295,7 +295,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -397,7 +397,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -517,7 +517,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -622,7 +622,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -727,7 +727,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -925,7 +925,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1109,7 +1109,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1217,7 +1217,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1543,7 +1543,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1645,7 +1645,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1747,7 +1747,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1853,7 +1853,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2210,7 +2210,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json index d7641cd5..35d26005 100644 --- a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json index 43984075..66ba8640 100644 --- a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json index fa778790..8c6e5615 100644 --- a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json @@ -118,7 +118,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -216,7 +216,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -407,13 +407,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -505,13 +505,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -755,13 +755,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -853,13 +853,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -964,7 +964,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1011,13 +1011,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1109,13 +1109,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1289,13 +1289,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1387,13 +1387,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1498,7 +1498,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1545,13 +1545,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1643,13 +1643,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1777,7 +1777,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1824,13 +1824,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1922,13 +1922,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2126,7 +2126,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2224,7 +2224,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2350,7 +2350,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2403,7 +2403,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2501,7 +2501,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2659,7 +2659,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2757,7 +2757,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3051,7 +3051,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3098,13 +3098,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3196,13 +3196,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3322,7 +3322,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3369,13 +3369,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3467,13 +3467,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3592,7 +3592,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3639,13 +3639,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3737,13 +3737,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3864,7 +3864,7 @@ "html_url": "<base>/acme/prs/pulls/2", "diff_url": "<base>/acme/prs/pulls/2.diff", "patch_url": "<base>/acme/prs/pulls/2.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -3911,13 +3911,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4009,13 +4009,13 @@ "template": false, "parent": null, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4139,7 +4139,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4193,7 +4193,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4247,7 +4247,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4301,7 +4301,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4373,7 +4373,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4425,7 +4425,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4465,7 +4465,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#2>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4505,7 +4505,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#3>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4545,7 +4545,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#4>", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4598,7 +4598,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4638,7 +4638,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#2>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4678,7 +4678,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#3>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4718,7 +4718,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#4>", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4769,7 +4769,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4855,7 +4855,7 @@ }, "body": { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { @@ -4904,7 +4904,7 @@ "body": [ { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { diff --git a/crates/forge/conformance/fixtures/1.22.6/G-merge.json b/crates/forge/conformance/fixtures/1.22.6/G-merge.json index 47a50959..b824b784 100644 --- a/crates/forge/conformance/fixtures/1.22.6/G-merge.json +++ b/crates/forge/conformance/fixtures/1.22.6/G-merge.json @@ -127,7 +127,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -225,7 +225,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -450,7 +450,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -548,7 +548,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -820,7 +820,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -918,7 +918,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1153,7 +1153,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1251,7 +1251,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1485,7 +1485,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1583,7 +1583,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1771,7 +1771,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1869,7 +1869,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2045,7 +2045,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2143,7 +2143,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2329,7 +2329,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2427,7 +2427,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2615,7 +2615,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2713,7 +2713,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2899,7 +2899,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2997,7 +2997,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3142,7 +3142,7 @@ "html_url": "<base>/acme/merges/pulls/11", "diff_url": "<base>/acme/merges/pulls/11.diff", "patch_url": "<base>/acme/merges/pulls/11.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#15>", @@ -3219,7 +3219,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3317,7 +3317,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3468,7 +3468,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3539,13 +3539,13 @@ "template": false, "parent": null, "mirror": false, - "size": 40, + "size": 41, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3637,13 +3637,13 @@ "template": false, "parent": null, "mirror": false, - "size": 40, + "size": 41, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3907,7 +3907,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4005,7 +4005,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4196,7 +4196,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4294,7 +4294,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json index a29180e5..5a6661f2 100644 --- a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json @@ -196,7 +196,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -862,7 +862,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1101,7 +1101,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1375,7 +1375,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1684,7 +1684,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1942,7 +1942,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2742,7 +2742,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3166,7 +3166,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3392,7 +3392,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json index 1d906925..095de389 100644 --- a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json @@ -478,7 +478,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -897,7 +897,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -989,7 +989,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1081,7 +1081,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1173,7 +1173,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1265,7 +1265,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1357,7 +1357,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1449,7 +1449,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1541,7 +1541,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1633,7 +1633,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1741,7 +1741,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1833,7 +1833,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1925,7 +1925,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2017,7 +2017,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2109,7 +2109,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2201,7 +2201,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2293,7 +2293,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2385,7 +2385,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2477,7 +2477,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2569,7 +2569,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2661,7 +2661,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2753,7 +2753,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2845,7 +2845,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3005,7 +3005,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3097,7 +3097,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3189,7 +3189,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3281,7 +3281,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3373,7 +3373,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3465,7 +3465,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3557,7 +3557,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3649,7 +3649,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3741,7 +3741,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json index 35abb05a..59eadf9e 100644 --- a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -161,7 +161,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -266,7 +266,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -368,7 +368,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -473,7 +473,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -578,7 +578,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -684,7 +684,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -790,7 +790,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -923,7 +923,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1079,7 +1079,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/M-names.json b/crates/forge/conformance/fixtures/1.22.6/M-names.json index 49570018..22071164 100644 --- a/crates/forge/conformance/fixtures/1.22.6/M-names.json +++ b/crates/forge/conformance/fixtures/1.22.6/M-names.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -298,7 +298,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -542,7 +542,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -648,7 +648,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -844,7 +844,7 @@ "html_url": "<base>/acme/a..b", "url": "<base>/api/v1/repos/acme/a..b", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/a..b.git", + "ssh_url": "ssh://git@localhost:2222/acme/a..b.git", "clone_url": "<base>/acme/a..b.git", "original_url": "", "website": "", @@ -950,7 +950,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/api.git", + "ssh_url": "ssh://git@localhost:2222/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -1056,7 +1056,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/admin.git", + "ssh_url": "ssh://git@localhost:2222/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1162,7 +1162,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/user.git", + "ssh_url": "ssh://git@localhost:2222/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1268,7 +1268,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/assets.git", + "ssh_url": "ssh://git@localhost:2222/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1392,7 +1392,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1873,7 +1873,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1978,7 +1978,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2092,7 +2092,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2255,7 +2255,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2360,7 +2360,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json index 3a9ebaf3..52acc0e1 100644 --- a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -162,7 +162,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -264,7 +264,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -534,7 +534,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -645,7 +645,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -756,7 +756,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -929,7 +929,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1040,7 +1040,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1151,7 +1151,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1275,7 +1275,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json index 05c08732..667e1588 100644 --- a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -210,7 +210,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -384,7 +384,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -482,7 +482,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -935,7 +935,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1033,7 +1033,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1203,7 +1203,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1301,7 +1301,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1488,7 +1488,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1586,7 +1586,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1873,7 +1873,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1971,7 +1971,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2154,7 +2154,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2252,7 +2252,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2429,7 +2429,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2527,7 +2527,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2698,7 +2698,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2796,7 +2796,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2964,7 +2964,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3062,7 +3062,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3246,7 +3246,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3344,7 +3344,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json index e33c70f4..c45c4d88 100644 --- a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json @@ -115,7 +115,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -213,7 +213,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -371,7 +371,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -469,7 +469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -739,7 +739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -897,7 +897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1167,7 +1167,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1265,7 +1265,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1437,7 +1437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1535,7 +1535,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1693,7 +1693,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1791,7 +1791,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1963,7 +1963,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2219,7 +2219,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2317,7 +2317,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2488,7 +2488,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2586,7 +2586,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2744,7 +2744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2842,7 +2842,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3000,7 +3000,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3098,7 +3098,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3256,7 +3256,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3354,7 +3354,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3512,7 +3512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3610,7 +3610,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3787,7 +3787,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3885,7 +3885,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4043,7 +4043,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4141,7 +4141,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4299,7 +4299,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4397,7 +4397,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4555,7 +4555,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4653,7 +4653,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4811,7 +4811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4909,7 +4909,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5086,7 +5086,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5184,7 +5184,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5342,7 +5342,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5440,7 +5440,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5598,7 +5598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5696,7 +5696,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5854,7 +5854,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5952,7 +5952,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6110,7 +6110,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6208,7 +6208,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6385,7 +6385,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6483,7 +6483,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6641,7 +6641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6739,7 +6739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6897,7 +6897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6995,7 +6995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7153,7 +7153,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7251,7 +7251,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7409,7 +7409,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7507,7 +7507,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7684,7 +7684,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7782,7 +7782,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7940,7 +7940,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8038,7 +8038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8196,7 +8196,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8294,7 +8294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8452,7 +8452,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8550,7 +8550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8708,7 +8708,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8806,7 +8806,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8983,7 +8983,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9081,7 +9081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9239,7 +9239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9337,7 +9337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9495,7 +9495,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9593,7 +9593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9751,7 +9751,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9849,7 +9849,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10105,7 +10105,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10276,7 +10276,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10374,7 +10374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10532,7 +10532,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10630,7 +10630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10788,7 +10788,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10886,7 +10886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11044,7 +11044,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11142,7 +11142,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11300,7 +11300,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11398,7 +11398,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11569,7 +11569,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11667,7 +11667,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11825,7 +11825,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11923,7 +11923,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12081,7 +12081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12179,7 +12179,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12337,7 +12337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12435,7 +12435,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12593,7 +12593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12691,7 +12691,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12862,7 +12862,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12960,7 +12960,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13118,7 +13118,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13216,7 +13216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13374,7 +13374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13472,7 +13472,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13630,7 +13630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13886,7 +13886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13984,7 +13984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14953,7 +14953,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15135,7 +15135,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15245,7 +15245,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15337,7 +15337,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15446,7 +15446,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json index 98265109..fc8ed127 100644 --- a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json @@ -423,7 +423,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json index cc2a6b50..6bceb04f 100644 --- a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json @@ -367,7 +367,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -465,7 +465,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json index 360737b4..abc23e30 100644 --- a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -215,7 +215,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -386,7 +386,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -484,7 +484,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -685,7 +685,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -783,7 +783,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -959,7 +959,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1057,7 +1057,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1536,7 +1536,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1634,7 +1634,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1810,7 +1810,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1908,7 +1908,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2079,7 +2079,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2177,7 +2177,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2368,7 +2368,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2466,7 +2466,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2637,7 +2637,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2735,7 +2735,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2942,7 +2942,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3040,7 +3040,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3246,7 +3246,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3344,7 +3344,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3532,7 +3532,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3630,7 +3630,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3798,7 +3798,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3896,7 +3896,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json index b1fc531c..036e062e 100644 --- a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json @@ -298,7 +298,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json index c8ae52ad..3a1148b5 100644 --- a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json @@ -89,7 +89,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -275,7 +275,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -461,7 +461,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -647,7 +647,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1019,7 +1019,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1205,7 +1205,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json index 39333e6b..dcb3db97 100644 --- a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json @@ -687,7 +687,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -877,9 +877,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "HasOrgOrUserVisible", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -924,9 +924,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/C-repos.json b/crates/forge/conformance/fixtures/1.26.2/C-repos.json index 7a818efb..cf9301a1 100644 --- a/crates/forge/conformance/fixtures/1.26.2/C-repos.json +++ b/crates/forge/conformance/fixtures/1.26.2/C-repos.json @@ -60,7 +60,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -302,7 +302,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -408,7 +408,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -474,9 +474,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -532,7 +532,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -860,7 +860,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -956,7 +956,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1052,7 +1052,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1148,7 +1148,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1260,7 +1260,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1328,9 +1328,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -1590,7 +1590,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1696,7 +1696,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1802,7 +1802,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1912,7 +1912,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -2127,7 +2127,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2277,7 +2277,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json index fb4b15a4..26ed82c4 100644 --- a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -159,9 +159,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -204,11 +204,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", - "url": "<base>/api/swagger", "errors": [ "object does not exist [id: main, rel_path: ]" - ] + ], + "message": "not found", + "url": "<base>/api/swagger" } }, { @@ -221,11 +221,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", "errors": [ "object does not exist [id: main, rel_path: ]" - ], - "message": "not found" + ] } }, { @@ -252,9 +252,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "commit doesn't exist: HEAD", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "commit doesn't exist: HEAD" } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json index fdf261b8..7ca5b6a6 100644 --- a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -442,9 +442,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -1290,9 +1290,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "commit doesn't exist: <sha#6>", "url": "<base>/api/swagger", - "errors": null, - "message": "commit doesn't exist: <sha#6>" + "errors": null } }, { @@ -1804,11 +1804,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", - "url": "<base>/api/swagger", "errors": [ "object does not exist [id: nope, rel_path: ]" - ] + ], + "message": "not found", + "url": "<base>/api/swagger" } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json index a3810000..4dcdaf11 100644 --- a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json @@ -118,7 +118,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -220,7 +220,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -417,13 +417,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -519,13 +519,13 @@ "fork": false, "template": false, "mirror": false, - "size": 24, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -647,9 +647,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -778,7 +778,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -880,7 +880,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1041,7 +1041,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1143,7 +1143,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1428,7 +1428,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1589,7 +1589,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1691,7 +1691,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1878,7 +1878,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1980,7 +1980,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2184,7 +2184,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2286,7 +2286,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2468,7 +2468,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2570,7 +2570,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2731,7 +2731,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2833,7 +2833,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3186,7 +3186,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3288,7 +3288,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3464,7 +3464,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3566,7 +3566,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3744,7 +3744,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3846,7 +3846,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4026,7 +4026,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4128,7 +4128,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4258,7 +4258,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4312,7 +4312,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4366,7 +4366,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4420,7 +4420,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4492,7 +4492,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-11", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4544,7 +4544,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4584,7 +4584,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#2>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4624,7 +4624,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#3>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4664,7 +4664,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#4>", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4717,7 +4717,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4757,7 +4757,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-8", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#2>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4797,7 +4797,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-9", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#3>", "pull_request_url": "<base>/acme/prs/pulls/1" }, { @@ -4837,7 +4837,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-10", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#4>", "pull_request_url": "<base>/acme/prs/pulls/1" } ] @@ -4888,7 +4888,7 @@ "comments_count": 0, "submitted_at": "<ts>", "updated_at": "<ts>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-7", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1" } }, @@ -4974,7 +4974,7 @@ }, "body": { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { @@ -5023,7 +5023,7 @@ "body": [ { "id": "<id:id#1>", - "html_url": "<base>/acme/prs/pulls/1#issuecomment-12", + "html_url": "<base>/acme/prs/pulls/1#issuecomment-<id:fragment:issuecomment#1>", "pull_request_url": "<base>/acme/prs/pulls/1", "issue_url": "", "user": { diff --git a/crates/forge/conformance/fixtures/1.26.2/G-merge.json b/crates/forge/conformance/fixtures/1.26.2/G-merge.json index 3bbde242..7d2773c0 100644 --- a/crates/forge/conformance/fixtures/1.26.2/G-merge.json +++ b/crates/forge/conformance/fixtures/1.26.2/G-merge.json @@ -127,7 +127,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -229,7 +229,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -460,7 +460,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -562,7 +562,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -834,13 +834,13 @@ "fork": false, "template": false, "mirror": false, - "size": 25, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -936,13 +936,13 @@ "fork": false, "template": false, "mirror": false, - "size": 25, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1183,7 +1183,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1285,7 +1285,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1525,7 +1525,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1627,7 +1627,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1821,7 +1821,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1923,7 +1923,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2105,7 +2105,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2207,7 +2207,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2393,13 +2393,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2495,13 +2495,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2689,13 +2689,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2791,13 +2791,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2875,9 +2875,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "url": "<base>/api/swagger", "errors": null, - "message": "not found", - "url": "<base>/api/swagger" + "message": "not found" } }, { @@ -2983,13 +2983,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3085,13 +3085,13 @@ "fork": false, "template": false, "mirror": false, - "size": 31, + "size": 32, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3319,7 +3319,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3421,7 +3421,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3655,7 +3655,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3757,7 +3757,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4027,7 +4027,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4129,7 +4129,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4326,7 +4326,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4428,7 +4428,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json index 9304c33d..20e0de3c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -291,7 +291,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -499,7 +499,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -965,7 +965,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1208,7 +1208,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1486,7 +1486,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1799,7 +1799,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2865,7 +2865,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3145,9 +3145,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -3293,7 +3293,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3521,7 +3521,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json index 5911fe7e..29efade9 100644 --- a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json @@ -390,9 +390,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -414,9 +414,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -429,9 +429,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json index 42b56366..66cff5d2 100644 --- a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json @@ -621,9 +621,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json index 29612298..6a5033ad 100644 --- a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json @@ -291,9 +291,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -321,9 +321,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -364,9 +364,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -477,7 +477,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -670,9 +670,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -685,9 +685,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -900,7 +900,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -996,7 +996,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1092,7 +1092,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1182,13 +1182,13 @@ "fork": false, "template": false, "mirror": false, - "size": 44, + "size": 45, "language": "Text", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1284,7 +1284,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1380,7 +1380,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1476,7 +1476,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1572,7 +1572,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1668,7 +1668,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1780,7 +1780,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1876,7 +1876,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1972,7 +1972,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2068,7 +2068,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/empty.git", + "ssh_url": "ssh://git@localhost:2222/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2164,7 +2164,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2254,13 +2254,13 @@ "fork": false, "template": false, "mirror": false, - "size": 44, + "size": 45, "language": "Text", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2356,7 +2356,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2452,7 +2452,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2548,7 +2548,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2644,7 +2644,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2740,7 +2740,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2836,7 +2836,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2932,7 +2932,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3096,7 +3096,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3192,7 +3192,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/blank.git", + "ssh_url": "ssh://git@localhost:2222/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3288,7 +3288,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/hist.git", + "ssh_url": "ssh://git@localhost:2222/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3384,7 +3384,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prs.git", + "ssh_url": "ssh://git@localhost:2222/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3474,13 +3474,13 @@ "fork": false, "template": false, "mirror": false, - "size": 44, + "size": 45, "language": "Text", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/merges.git", + "ssh_url": "ssh://git@localhost:2222/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3576,7 +3576,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/status.git", + "ssh_url": "ssh://git@localhost:2222/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3672,7 +3672,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/prot.git", + "ssh_url": "ssh://git@localhost:2222/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3768,7 +3768,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/smart.git", + "ssh_url": "ssh://git@localhost:2222/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3864,7 +3864,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/vis.git", + "ssh_url": "ssh://git@localhost:2222/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json index e998d8ff..15a8b115 100644 --- a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -164,7 +164,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -273,7 +273,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -379,7 +379,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -488,7 +488,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -597,7 +597,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -707,7 +707,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -817,7 +817,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -896,9 +896,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -954,7 +954,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1114,7 +1114,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/M-names.json b/crates/forge/conformance/fixtures/1.26.2/M-names.json index 21880e0c..af2eef90 100644 --- a/crates/forge/conformance/fixtures/1.26.2/M-names.json +++ b/crates/forge/conformance/fixtures/1.26.2/M-names.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -199,7 +199,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -305,7 +305,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -411,7 +411,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -557,7 +557,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -667,7 +667,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -885,7 +885,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/api.git", + "ssh_url": "ssh://git@localhost:2222/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/admin.git", + "ssh_url": "ssh://git@localhost:2222/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1105,7 +1105,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/user.git", + "ssh_url": "ssh://git@localhost:2222/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1215,7 +1215,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/assets.git", + "ssh_url": "ssh://git@localhost:2222/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1343,7 +1343,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1837,7 +1837,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1946,7 +1946,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2231,7 +2231,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2340,7 +2340,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json index 8ce399ce..4c8603ac 100644 --- a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json @@ -56,7 +56,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -165,7 +165,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -271,7 +271,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -549,7 +549,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -664,7 +664,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -779,7 +779,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -956,7 +956,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1071,7 +1071,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1186,7 +1186,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1314,7 +1314,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json index adbb47e2..98f697d5 100644 --- a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -394,7 +394,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -496,7 +496,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -669,7 +669,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -771,7 +771,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -962,7 +962,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1064,7 +1064,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1237,7 +1237,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1339,7 +1339,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1418,9 +1418,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -1532,7 +1532,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1634,7 +1634,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1927,7 +1927,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2029,7 +2029,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2218,7 +2218,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2320,7 +2320,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2503,7 +2503,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2605,7 +2605,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2782,7 +2782,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2884,7 +2884,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3058,7 +3058,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3160,7 +3160,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3350,7 +3350,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3452,7 +3452,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/life.git", + "ssh_url": "ssh://git@localhost:2222/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json index 34c1648f..185271dc 100644 --- a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -375,7 +375,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -477,7 +477,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -754,7 +754,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -915,7 +915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1192,7 +1192,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1294,7 +1294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1469,7 +1469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1571,7 +1571,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1732,7 +1732,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1834,7 +1834,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2009,7 +2009,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2111,7 +2111,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2272,7 +2272,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2374,7 +2374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2548,7 +2548,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2650,7 +2650,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2811,7 +2811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2913,7 +2913,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3074,7 +3074,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3176,7 +3176,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3337,7 +3337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3439,7 +3439,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3600,7 +3600,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3702,7 +3702,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3882,7 +3882,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3984,7 +3984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4145,7 +4145,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4247,7 +4247,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4408,7 +4408,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4510,7 +4510,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4671,7 +4671,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4773,7 +4773,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4934,7 +4934,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5036,7 +5036,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5216,7 +5216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5318,7 +5318,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5479,7 +5479,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5581,7 +5581,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5742,7 +5742,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5844,7 +5844,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6005,7 +6005,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6107,7 +6107,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6268,7 +6268,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6370,7 +6370,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6550,7 +6550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6652,7 +6652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6813,7 +6813,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6915,7 +6915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7076,7 +7076,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7178,7 +7178,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7339,7 +7339,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7441,7 +7441,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7602,7 +7602,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7704,7 +7704,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7884,7 +7884,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7986,7 +7986,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8147,7 +8147,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8249,7 +8249,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8410,7 +8410,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8512,7 +8512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8673,7 +8673,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8775,7 +8775,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8936,7 +8936,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9038,7 +9038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9218,7 +9218,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9320,7 +9320,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9481,7 +9481,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9583,7 +9583,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9744,7 +9744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9846,7 +9846,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10109,7 +10109,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10270,7 +10270,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10372,7 +10372,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10546,7 +10546,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10648,7 +10648,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10809,7 +10809,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10911,7 +10911,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11072,7 +11072,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11174,7 +11174,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11335,7 +11335,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11437,7 +11437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11598,7 +11598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11700,7 +11700,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11874,7 +11874,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11976,7 +11976,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12137,7 +12137,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12239,7 +12239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12400,7 +12400,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12502,7 +12502,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12663,7 +12663,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12765,7 +12765,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12926,7 +12926,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13028,7 +13028,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13202,7 +13202,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13304,7 +13304,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13465,7 +13465,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13567,7 +13567,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13830,7 +13830,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13991,7 +13991,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14093,7 +14093,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14254,7 +14254,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14356,7 +14356,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15331,7 +15331,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15518,7 +15518,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pages.git", + "ssh_url": "ssh://git@localhost:2222/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15632,7 +15632,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15728,7 +15728,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15841,7 +15841,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json index b172c59e..da4ab7d8 100644 --- a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json @@ -42,9 +42,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -437,7 +437,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", @@ -540,9 +540,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json index 0dc5398e..10f7e94c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json @@ -367,7 +367,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -469,7 +469,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/refs.git", + "ssh_url": "ssh://git@localhost:2222/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json index 6c43d899..e40f7ae3 100644 --- a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -219,7 +219,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -498,7 +498,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -698,7 +698,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -800,7 +800,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -982,7 +982,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1084,7 +1084,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1261,7 +1261,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1363,7 +1363,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1579,7 +1579,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1681,7 +1681,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1863,7 +1863,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1965,7 +1965,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2142,7 +2142,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2244,7 +2244,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2441,7 +2441,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2543,7 +2543,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2720,7 +2720,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2822,7 +2822,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3035,7 +3035,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3137,7 +3137,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3349,7 +3349,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3451,7 +3451,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3645,7 +3645,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3747,7 +3747,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3921,7 +3921,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -4023,7 +4023,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json index 92420568..c4f9dda5 100644 --- a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json @@ -305,7 +305,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -407,7 +407,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/checks.git", + "ssh_url": "ssh://git@localhost:2222/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json index 449846a9..3380e626 100644 --- a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json @@ -88,7 +88,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -278,7 +278,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -468,7 +468,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -658,7 +658,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -848,7 +848,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1038,7 +1038,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://<creds>@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py index d19a003a..d9f528cd 100644 --- a/crates/forge/conformance/run.py +++ b/crates/forge/conformance/run.py @@ -28,11 +28,8 @@ import zipfile TRACKED_HEADERS = ("content-type", "x-total-count", "link", "www-authenticate", "location") -# Every scalar in a recorded body is compared by value after normalization, except volatile ones: -# `message`/`errors` (text, see must_contain), any `url`/`*_url` (host-dependent), repo `size`, the racy -# `mergeable` (a PR flips to "checking" after every base change; see the notes in G/T), `language` and the -# async open-PR/issue counters, plus -# paths a call lists in `volatile=[...]` (dotted key path, or a bare key name; `$text` for a text body). +# Every scalar in a recorded body is compared by value after normalization, except DEFAULT_VOLATILE (below) and +# the dotted paths a call lists in `volatile=[...]` (`$text` for a text body). TOKEN_KEYS = {"sha1", "token", "token_last_eight", "password"} SHA_RE = re.compile(r"\b[0-9a-f]{40}\b") SHORT_RE = re.compile(r"\b[0-9a-f]{7,12}\.\.\.?[0-9a-f]{7,12}\b") @@ -121,13 +118,22 @@ def eq_str(exp, act, bij, d, shown): return True +# Keys compared by type only, at any depth. Everything else is compared by value, including `url`/`*_url` +# (after the base URL became <base>), commit/review `message`, `body` and status `description`. +# avatar_url hash of the e-mail or a generated avatar; differs per server +# mergeable flips while Gitea re-checks a PR after every base change +# language repo language stats are computed asynchronously +# open_pr_counter, open_issues_count async counters in embedded repo objects +# size (repo objects only, detected by `full_name`) disk size of the bare repo +# Per-call/per-departure entries (`volatile=`, `ignore_fields`) are dotted paths and match only that path. +# The top-level `message`/`errors` of an HTTP error response are compared as text by cmp_exchange instead. +DEFAULT_VOLATILE = {"avatar_url", "mergeable", "language", "open_pr_counter", "open_issues_count"} + + def is_volatile(key, dotted, parent, volatile): - if dotted in volatile or key in volatile: - return True - k = key or "" - if k in ("message", "errors", "url", "mergeable", "language", "open_pr_counter", "open_issues_count") or (k.endswith("_url") and k != "target_url"): + if dotted in volatile or key in DEFAULT_VOLATILE: return True - return k == "size" and isinstance(parent, dict) and "full_name" in parent + return key == "size" and isinstance(parent, dict) and "full_name" in parent def cmp_json(exp, act, path, d, volatile, bij, key=None, parent=None): @@ -210,7 +216,7 @@ def refusal_lines(text): return out -def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): +def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None, skip_headers=()): """Return [(level, text)] where level is 'fail' or 'warn'. Empty list means match.""" d = [] bij.new_exchange() @@ -264,12 +270,16 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None): d.append(("fail", f"first read {act['first_read_differs']['first']} differs from the settled " f"{act['first_read_differs']['settled']} (--strict-first-read)")) for h, v in exp.get("headers", {}).items(): + if h in skip_headers: + continue got = act.get("headers", {}).get(h) if got is None: d.append(("fail", f"header {h}: expected {v!r}, missing")) else: eq_str(v, got, bij, d, f"header {h}") volatile = set(exp.get("volatile", [])) | set(extra_volatile) + if es >= 400 or act["status"] >= 400: + volatile |= {"message", "errors"} # top-level error text: compared above (or by a departure) if "body" in exp: if "body" not in act: d.append(("fail", f"expected JSON body, got {act.get('body_text', '')[:120]!r}")) @@ -318,7 +328,8 @@ def dep_indexes(spec, expected): return [i for i, e in enumerate(expected) if e.get("name") == spec or e.get("key") == spec] -EXPECT_KEYS = {"status", "message_contains", "ok", "value", "fields", "ignore_fields", "ignore_body", "skip"} +EXPECT_KEYS = {"status", "message_contains", "ok", "value", "fields", "ignore_fields", "ignore_body", + "ignore_headers", "skip"} def ex_ident(ex): @@ -430,9 +441,17 @@ def apply_override(exp, act, ov, bij, match=None): if got != v: d.append(("fail", f"unexpected: {k} {v!r} expected, got {got!r}")) pins = list((e.get("fields") or {})) - if not e.get("ignore_body") and sts is None and (e.get("ignore_fields") or pins): + status_ok = sts is None or act["status"] in sts + if status_ok: + # everything the entry does not replace is still compared: headers (minus `ignore_headers`), the body + # minus `ignore_fields` and the pinned keys, or no body at all only with an explicit `ignore_body` + if e.get("ignore_body"): + saved = exp + exp = {k: v for k, v in exp.items() if k not in ("body", "body_text", "body_prefix_hex", "archive")} skip = list(e.get("ignore_fields") or []) + [k for k in pins if k != "$len"] - d += [x for x in cmp_exchange(exp, act, bij, extra_volatile=skip) if x[0] == "fail"] + d += [x for x in cmp_exchange(exp, act, bij, extra_volatile=skip, + status_override=act["status"] if sts is not None else None, + skip_headers=tuple(e.get("ignore_headers") or [])) if x[0] == "fail"] return d or [("honoured", why)] @@ -495,11 +514,13 @@ def scrub(self, s): return re.sub(r"\b%s\b" % re.escape(self.admin_user), "<admin>", s) def ns(self, s): - s = re.sub(r"(://)[^/@\s\"']+@", r"\1<creds>@", self.scrub(s)) + s = re.sub(r"(://)[^/@\s\"':]*:[^/@\s\"']*@", r"\1<creds>@", self.scrub(s)) # user:password@ only (ssh://git@ stays) # pkt-line adverts glue a 4-hex length in front of the id ("0146<sha> HEAD"), so \b misses it s = re.sub(r"[0-9a-f]{40}(?= (?:HEAD|refs/|capabilities))", lambda m: self.sha_ph(m.group(0)), s) s = SHA_RE.sub(lambda m: self.sha_ph(m.group(0)), s) s = SHORT_RE.sub("<short>..<short>", s) + # database counters inside URL fragments (`#issuecomment-7`) depend on everything created before + s = re.sub(r"#(issuecomment|issue|event)-(\d+)", lambda m: f"#{m.group(1)}-" + self.id_ph("fragment:" + m.group(1), int(m.group(2))), s) return RFC_RE.sub("<ts>", TS_RE.sub("<ts>", s)) def nj(self, v): @@ -872,6 +893,12 @@ def run_all(c, only, out=None, fixtures=None, departures=()): if i in c.overrides: stale.append(f"duplicate departure for #{i} ({dep.get('reason', '')})") continue + rs, sts = c.expected[i].get("status"), dep["expect"].get("status") + sts = sts if isinstance(sts, list) else ([sts] if sts is not None else []) + if rs is not None and any((x >= 400) != (rs >= 400) for x in sts) and not dep["expect"].get("ignore_body"): + stale.append(f"departure #{i} changes the status class (recorded {rs}, expects {sts}): its body " + f"cannot match the recorded one, so it needs ignore_body with a reason") + continue c.overrides[i] = dict(dep, match=matches[k] or got) t0 = time.time() err = None From d3162942de0e1b800609b519d1ca6d6291ec2407 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 17:34:33 +0300 Subject: [PATCH 14/23] docs(forge): hide refs/forge from both services with transfer.hideRefs --- docs/superpowers/specs/2026-10-22-p38-forge-design.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index d8742070..11b3df49 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -254,7 +254,9 @@ line (`Status:` and headers), then the body is streamed. - **Ref namespace policy** (pre-receive): client pushes may write `refs/heads/*` and `refs/tags/*` only. `refs/replace/*`, `refs/forge/*`, `refs/pull/*`, `refs/notes/*` and anything else are refused. `refs/forge/` is hidden from - advertisement (`uploadpack.hideRefs`). + advertisement of both services with `transfer.hideRefs=refs/forge/` (tested with + git 2.54: `uploadpack.hideRefs` alone still lists it to receive-pack, and + `receive.hideRefs` alone still lists it to upload-pack). - **Branch protection applies to every mutation path, one policy function** shared by pre-receive, contents writes and merges: a protected branch refuses direct updates from receive-pack and contents writes when `enable_push` is From 513b05936c06b8a0ac957a5c71cd7b0ddf402eb8 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 17:36:45 +0300 Subject: [PATCH 15/23] docs(forge): ordered retention-ref freeze, creating state, commit identity, git fsync --- .../specs/2026-10-22-p38-forge-design.md | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 11b3df49..79b515e8 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -153,7 +153,7 @@ and a new directory, so a lingering process cannot see the replacement. `users` (login, lower_login UNIQUE, kind user|org, email, password hash, is_admin, visibility), `org_members`, `tokens` (user, name, BLAKE3 hash, last_eight, scopes, expires_at), `repos` (id, owner, name, lower_name UNIQUE per -owner, private, description, default_branch, state live|deleting), +owner, private, description, default_branch, state creating|live|deleting), `collaborators`, `pulls` (repo, number, head_ref, base_ref, title, body, state, merged, merge_commit_sha, `head_sha_at_merge`, `changed_files_at_merge`, timestamps), `merge_intents`, `reviews`, `comments`, `commit_statuses` (repo, @@ -248,7 +248,15 @@ line (`Status:` and headers), then the body is streamed. `uploadpack.allowReachableSHA1InWant=true`, `uploadpackfilter.allow=false` with an explicit allow for `blob:none` only, `receive.fsckObjects=true`, `receive.maxInputSize`, `receive.autogc=false`, `gc.auto=0`, - `core.useReplaceRefs=false`. Only the `pre-receive` and `post-receive` hook + `core.useReplaceRefs=false`, and durability (`core.fsync=all`, + `core.fsyncMethod=fsync`, `receive.fsyncObjects=true`), so a loose object or ref + that SQLite later records as complete is on disk first. Commit-producing spawns + (`commit-tree` for auto-init, contents writes and merges) get an explicit + identity: `GIT_AUTHOR_NAME`/`GIT_COMMITTER_NAME` = the acting user's login and + `GIT_AUTHOR_EMAIL`/`GIT_COMMITTER_EMAIL` = `<login>@noreply.<public-url host>`, + with the acting user being the merger for merges and the authenticated writer for + contents; server-originated commits (auto-init by a service account) use the + creating user. No identity comes from system, global or repository config. Only the `pre-receive` and `post-receive` hook shims exist; the hook child receives only `FORGE_REPO_ID`, `FORGE_USER_ID`, `FORGE_GENERATION`, `FORGE_DB` and git's quarantine variables. - **Ref namespace policy** (pre-receive): client pushes may write `refs/heads/*` @@ -275,8 +283,13 @@ line (`Status:` and headers), then the body is streamed. - **PR retention:** the server keeps `refs/forge/pull/<n>/head` for every PR. It is created **before** the PR row is inserted (so a crash leaves at worst an orphan ref, never a PR whose head can be pruned), refreshed by `post-receive` - **only while the PR is open**, frozen when the PR is closed or merged (the final - head is written in the same step that records `head_sha_at_merge` or the close), + **only while the PR is open**, frozen when the PR is closed or merged. Freezing is ordered + **ref first, then database**: the final head is written to the ref, then the + SQLite transition records `head_sha_at_merge` or the close (for a merge this is + step 7 of the merge algorithm, after the base update; the `merge_intents` row + covers the gap). The reconciler repairs closed and merged PRs as well as open + ones: for each it makes the ref equal the stored final head (`head_sha_at_merge`, + or the head recorded at close), recreating it if missing, and the pre-receive hook records the head into it before allowing a deletion of an open PR's head branch. A startup reconciler removes `refs/forge/pull/<n>/*` refs with no PR row and recreates a missing ref for an open PR from its stored @@ -455,7 +468,7 @@ sc-forge hook pre-receive|post-receive # internal The supported backup is a crash-consistent volume snapshot. SQLite WAL and Git ref updates both survive a crash, and the merge-intent journal plus the reconcilers repair the only cross-store gap. Copying `forge.db` alone is not a -backup (it omits WAL contents). `synchronous=FULL` and Git's default fsync are +backup (it omits WAL contents). `synchronous=FULL` and the Git fsync settings above are kept. A restore test (kill -9 loop during pushes and merges, then reconcile and compare) ships with F4. From ac4b235127959454a435391577aa74f989f07647 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 17:46:39 +0300 Subject: [PATCH 16/23] docs(forge): protection linearization point, issue-comment POST, commit email --- .../specs/2026-10-22-p38-forge-design.md | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 79b515e8..66ade551 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -66,7 +66,8 @@ recorded fixtures, not here. `head.ref` because stock Gitea ignores `head`. - `POST /pulls/{n}/merge` with `{"Do":"merge","head_commit_id":…}`. - `GET|POST /pulls/{n}/reviews`, `GET /pulls/{n}/reviews/{id}/comments`, - `GET /issues/{n}/comments`. + `GET|POST /issues/{n}/comments` (the recorded scenarios create comments; reads + need `read:issue`, writes `write:issue`). - `POST /statuses/{sha}`; `GET /commits/{sha}/status` (combined) and `GET /statuses/{sha}`. @@ -253,7 +254,10 @@ line (`Status:` and headers), then the body is streamed. that SQLite later records as complete is on disk first. Commit-producing spawns (`commit-tree` for auto-init, contents writes and merges) get an explicit identity: `GIT_AUTHOR_NAME`/`GIT_COMMITTER_NAME` = the acting user's login and - `GIT_AUTHOR_EMAIL`/`GIT_COMMITTER_EMAIL` = `<login>@noreply.<public-url host>`, + `GIT_AUTHOR_EMAIL`/`GIT_COMMITTER_EMAIL` = the acting user's stored email (the + `--email` given at user creation; recorded Gitea shows the user's own address, + `<login>@noreply.localhost` for a noreply user), falling back to + `<login>@noreply.<public-url host>` when none is stored, with the acting user being the merger for merges and the authenticated writer for contents; server-originated commits (auto-init by a service account) use the creating user. No identity comes from system, global or repository config. Only the `pre-receive` and `post-receive` hook @@ -276,10 +280,14 @@ line (`Status:` and headers), then the body is streamed. a PR is allowed and has its own checks. The default branch is not protected unless a rule says so (Gitea behaviour). Deleting the default branch is refused. -- **Policy linearization:** authorization and protection are evaluated once when - a request starts (the hook re-reads protection at ref-update time under one - read transaction). A revocation or a new rule affects requests that start after - it commits; an in-flight push is not cancelled. Documented, not coordinated. +- **Policy linearization:** one point per mutation path, stated so tests can + pin it. *Authorization* (is this user allowed to write this repo) is evaluated + once when the request starts, and a revocation does not cancel an in-flight + push. *Branch protection* is evaluated at the moment of the ref update: the + `pre-receive` hook for pushes (one read transaction, after the pack is + received), and the same policy function immediately before `update-ref` for + contents writes and merges. A new rule therefore affects any update that has + not yet reached its ref-update point. Not coordinated beyond that. - **PR retention:** the server keeps `refs/forge/pull/<n>/head` for every PR. It is created **before** the PR row is inserted (so a crash leaves at worst an orphan ref, never a PR whose head can be pruned), refreshed by `post-receive` From d9feee8f540a37e00cdeee70ddda8fc712f1ee0e Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 17:57:28 +0300 Subject: [PATCH 17/23] docs(forge): user/repos routes, final_head_sha, trusted proxy peers, tested reachability behaviour --- .../specs/2026-10-22-p38-forge-design.md | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 66ade551..36d8f0e0 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -51,7 +51,9 @@ recorded fixtures, not here. `GET /api/v1/users/{u}/orgs/{o}/permissions` (`can_create_repository`). - `POST|GET|DELETE /api/v1/users/{u}/tokens` (password auth; mint returns `sha1`; list returns `id`, `name`, `token_last_eight`). -- `POST /api/v1/orgs/{o}/repos`; duplicate 409 or 422 "already exists". +- `POST /api/v1/orgs/{o}/repos` and `POST|GET /api/v1/user/repos` (a repo may be + owned by a user; the recorded scope scenarios call `user/repos`, which needs + `write:user`/`read:user`); duplicate 409 or 422 "already exists". - `GET|PATCH|DELETE /api/v1/repos/{o}/{r}` (keys read: `full_name`, `name`, `empty`, `private`, `description`, `default_branch`, `permissions`). - `PUT|DELETE /api/v1/repos/{o}/{r}/collaborators/{u}` (204). @@ -100,7 +102,13 @@ recorded fixtures, not here. - Combined status lists only the latest status per context; clients do not deduplicate. `X-Total-Count` equals the listed count. - `GET /commits` on an empty repo answers 409. -- Git needs reachable-SHA fetch, `blob:none` filters, shallow fetch, +- Git needs reachable-SHA fetch (tested with git 2.54, protocol v0: a commit + reachable only through a hidden `refs/forge/pull/*` ref is still fetchable with + `uploadpack.allowReachableSHA1InWant`, so `allowAnySHA1InWant` is not needed; + a commit no ref reaches is refused. Protocol v2 does not enforce reachability at + all, so any object whose id a reader knows is fetchable over v2, and the threat + model treats "deleted but not yet gc'd" objects as readable by anyone with read + access to the repo), `blob:none` filters, shallow fetch, `Git-Protocol: version=2`, and `push --force-with-lease=refs/heads/b:`. - Bootstrap scripts shell into the container for `admin user create --admin --must-change-password=false`, `admin user change-password`, and @@ -156,7 +164,7 @@ is_admin, visibility), `org_members`, `tokens` (user, name, BLAKE3 hash, last_eight, scopes, expires_at), `repos` (id, owner, name, lower_name UNIQUE per owner, private, description, default_branch, state creating|live|deleting), `collaborators`, `pulls` (repo, number, head_ref, base_ref, title, body, state, -merged, merge_commit_sha, `head_sha_at_merge`, `changed_files_at_merge`, +merged, merge_commit_sha, `final_head_sha` (the head frozen at merge or close), `changed_files_at_merge`, timestamps), `merge_intents`, `reviews`, `comments`, `commit_statuses` (repo, sha, context, state, description, target_url, id AUTOINCREMENT), `branch_protections` (repo, branch, enable_push, enable_status_check, @@ -216,7 +224,9 @@ requests, so an `admin` change is visible immediately. lockable by a stranger); argon2 runs under a global concurrency cap. The server refuses a non-loopback bind unless `--behind-proxy` or `--allow-plaintext` is given, and trusts a forwarded-for header only when - `--trusted-proxy-header` names it. + `--trusted-proxy-header` names it **and** the connection's peer address is inside a + configured `--trusted-proxies <CIDR,...>` (a forwarded-for value from any other + peer is ignored, so a client cannot spoof its address into the rate limiter). ### Git transport @@ -293,11 +303,10 @@ line (`Status:` and headers), then the body is streamed. orphan ref, never a PR whose head can be pruned), refreshed by `post-receive` **only while the PR is open**, frozen when the PR is closed or merged. Freezing is ordered **ref first, then database**: the final head is written to the ref, then the - SQLite transition records `head_sha_at_merge` or the close (for a merge this is + SQLite transition records `final_head_sha` (merge or close) (for a merge this is step 7 of the merge algorithm, after the base update; the `merge_intents` row covers the gap). The reconciler repairs closed and merged PRs as well as open - ones: for each it makes the ref equal the stored final head (`head_sha_at_merge`, - or the head recorded at close), recreating it if missing, + ones: for each it makes the ref equal the stored final head (`final_head_sha`), recreating it if missing, and the pre-receive hook records the head into it before allowing a deletion of an open PR's head branch. A startup reconciler removes `refs/forge/pull/<n>/*` refs with no PR row and recreates a missing ref for an open PR from its stored @@ -381,7 +390,7 @@ write access. Steps, all on captured object ids: answer 405 "try again later"; if the head moved, answer the stale-head response. 7. Mark the intent done and the PR merged (`merge_commit_sha`, - `head_sha_at_merge`, `changed_files_at_merge`) in one SQLite transaction; return + `final_head_sha`, `changed_files_at_merge`) in one SQLite transaction; return 200. After this the PR reads `merged: true` immediately. **Crash recovery.** Git and SQLite cannot commit together, so the intent row is From 7b1501eba907efed7cf91130e51bf8a2487512ce Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:10:05 +0300 Subject: [PATCH 18/23] docs(forge): route inventory appendix, dumb HTTP via http-backend, retention freeze serialization, directory fsync --- crates/forge/conformance/inventory.py | 73 +++++++++++++++++++ .../specs/2026-10-22-p38-forge-design.md | 48 ++++++++++-- 2 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 crates/forge/conformance/inventory.py diff --git a/crates/forge/conformance/inventory.py b/crates/forge/conformance/inventory.py new file mode 100644 index 00000000..06a0a8e2 --- /dev/null +++ b/crates/forge/conformance/inventory.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""Print the distinct HTTP route shapes recorded in a fixture directory. + +usage: python3 -I inventory.py fixtures/1.22.6 [--count] + +Path positions are templated structurally ({owner}, {repo}, {n}, {sha}, {name}), so +the list does not depend on the names a scenario happened to use. Used to keep the +spec's "Appendix A" honest: every route printed here has one decision there. +""" +import collections +import glob +import json +import re +import sys + + +def template(path): + path = path.split("?")[0] + path = re.sub(r"<id:[^>]*>", "{n}", path) + path = re.sub(r"<sha[^>]*>|\b[0-9a-f]{40}\b", "{sha}", path) + parts = path.split("/") + out = [] + i = 0 + while i < len(parts): + p = parts[i] + out.append(p) + if p == "repos" and parts[i - 1:i] == ["v1"] and parts[i + 1:i + 2] != ["search"]: + for slot in ("{owner}", "{repo}"): + i += 1 + if i < len(parts): + out.append(slot) + elif p in ("orgs", "users", "teams") and parts[i - 1:i] in (["v1"], ["api"]): + i += 1 + if i < len(parts): + out.append("{org}" if p == "orgs" else "{name}") + elif p == "users" and parts[i - 1:i] == ["admin"]: + i += 1 + if i < len(parts): + out.append("{name}") + elif p == "collaborators": + i += 1 + if i < len(parts): + out.append("{name}") + i += 1 + path = "/".join(out) + path = re.sub(r"/\d+(?=/|\.|$)", "/{n}", path) + path = re.sub(r"(/pulls/\{n\})\.(diff|patch)$", r"\1.\2", path) + if not path.startswith("/api/"): # web UI and git routes: /{owner}/{repo}[.git]/... + segs = path.split("/") + if len(segs) > 2: + segs[1], segs[2] = "{owner}", re.sub(r"^[^.]+", "{repo}", segs[2]) + path = "/".join(segs) + return path + + +def main(): + d = sys.argv[1] + routes = collections.defaultdict(set) + for p in sorted(glob.glob(d.rstrip("/") + "/[A-Z]-*.json")): + f = json.load(open(p)) + for e in f["exchanges"]: + if e.get("kind") == "http": + routes[(e["method"], template(e["path"]))].add(f["scenario"]) + if "--count" in sys.argv: + print(len(routes)) + return + print(f"{len(routes)} distinct HTTP route shapes") + for (m, t), s in sorted(routes.items(), key=lambda x: (x[0][1], x[0][0])): + print(f"{m:6} {t} [{','.join(sorted(s))}]") + + +if __name__ == "__main__": + main() diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 36d8f0e0..8ad0ffe9 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -230,8 +230,12 @@ requests, so an `admin` change is visible immediately. ### Git transport -Routes: `GET /{o}/{r}.git/info/refs?service=…`, `POST …/git-upload-pack`, -`POST …/git-receive-pack`. The server authenticates and authorizes (read for +Routes: every path under `/{o}/{r}.git/` is authenticated and handed to +`http-backend`: `GET info/refs?service=…`, `POST git-upload-pack`, `POST +git-receive-pack`, and the dumb-HTTP reads (`GET HEAD`, `objects/info/packs`, +`objects/..`), which `http-backend` serves from the same repository and which +the recorded fixtures exercise; write methods other than `git-receive-pack` are +refused. The server authenticates and authorizes (read for upload-pack, write for receive-pack), resolves the repo id from the database, and runs **`git http-backend`** as a CGI with `GIT_PROJECT_ROOT=<data>/repos/<id>.git` and `PATH_INFO` set to the service suffix. The CGI environment is built @@ -301,7 +305,12 @@ line (`Status:` and headers), then the body is streamed. - **PR retention:** the server keeps `refs/forge/pull/<n>/head` for every PR. It is created **before** the PR row is inserted (so a crash leaves at worst an orphan ref, never a PR whose head can be pruned), refreshed by `post-receive` - **only while the PR is open**, frozen when the PR is closed or merged. Freezing is ordered + **only while the PR is open**, frozen when the PR is closed or merged. A refresh + by `post-receive` is a conditional database update (`state = open`, then an + `update-ref` compare-and-swap against the value it read), and the freeze first + sets the PR to `freezing` under the per-repo write lock, so a concurrent push + either lands before the freeze (and is captured as the final head) or sees + `freezing` and does not touch the ref. Freezing is ordered **ref first, then database**: the final head is written to the ref, then the SQLite transition records `final_head_sha` (merge or close) (for a merge this is step 7 of the merge algorithm, after the base update; the `merge_intents` row @@ -434,8 +443,11 @@ answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. - **Create:** insert the row (`state=creating`), create the directory (`git init --bare` with the sanitized environment, `HEAD` symbolic to `refs/heads/<default_branch>`), optionally the initial commit (`auto_init`), - then mark live. A startup reconciler removes directories with no live row and - completes or removes `creating` rows. + then fsync the new repository directory and its parent `repos/` directory (and + `trash/` on a delete rename) before the row is marked live, so a power loss + cannot leave a live row whose directory entry never reached disk. A startup + reconciler removes directories with no live row and completes or removes + `creating` rows. - **Delete:** mark `deleting` (new work for that id is rejected), terminate the repo's registered children, rename the directory into `trash/`, delete the row, then remove the trash. Hooks verify `FORGE_GENERATION` against the database so @@ -489,6 +501,32 @@ backup (it omits WAL contents). `synchronous=FULL` and the Git fsync settings ab kept. A restore test (kill -9 loop during pushes and merges, then reconcile and compare) ships with F4. +## Appendix A: recorded route inventory and decisions + +The fixtures record 108 distinct HTTP route shapes (method plus structurally +templated path, across scenarios A to X; derive the list with +`python3 -I crates/forge/conformance/inventory.py crates/forge/conformance/fixtures/1.22.6`). The tiers above are what the two surveyed +clients call. Every recorded route group has one decision, so no route is in the +gate by accident: + +| Route group | Decision | Slice | +|---|---|---| +| `version`, `healthz`, `user`, `users/{u}`, `admin/users` (GET, POST, PATCH), tokens, org permissions | implement | F1 | +| `orgs` POST/GET, `orgs/{o}/repos` POST/GET, `user/repos` POST/GET | implement | F1, F2 | +| `repos/{o}/{r}` CRUD, `repos/search`, collaborators (GET, PUT, DELETE, `permission`) | implement | F2 | +| `branches` (list, get, DELETE under the protection policy), `branch_protections` CRUD | implement | F2, F4 | +| `tags`, `git/refs`, `git/refs/heads/*`, `git/refs/tags` | implement | F3 | +| `commits` (list, get, `.diff`, `.patch`), `git/commits`, `git/trees`, `contents` (GET, POST, PUT), `archive` zip and tar.gz | implement | F3 | +| `pulls` (create, list, get, PATCH), `pulls/{n}/merge` (POST, and GET as the is-merged probe), reviews (GET, POST), review comments, issue comments (GET, POST), `statuses`, combined `commits/{sha}/status` | implement | F4 | +| `pulls/{n}.diff`, `.patch`, `/commits`, `/files`, `reviews/{id}` GET | extra: implement in F4 if it is a few lines of `git diff`/`log`, otherwise a `skip` departure with that reason | F4 | +| Git smart and dumb HTTP under `/{o}/{r}.git/` | implement through `http-backend` | F2 | +| Teams (`orgs/{o}/teams`, `teams/{id}/members`) | out (non-goal): `skip` departures, tagged `team` | F1 | +| Web UI routes (`GET /{o}/{r}` and similar HTML pages) | out (non-goal): tagged `web`, excluded from the default gate | F1 | + +A slice is not done until each of its rows is either passing `check` or carries a +reviewed departure entry; the F1 PR adds the departure entries for the `out` +rows and any `extra` rows it declines. + ## Phases Every slice ends with its conformance fixtures passing `check`, plus end-to-end From dd92ace611ff205acc82f8d59683f8672bb87d5b Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:16:32 +0300 Subject: [PATCH 19/23] test(forge): web tag, unpaired exchanges, per-kind departures, ref advertisement and request-side checks check fails on unpaired exchanges and errors and counts each as a failed exchange; web-tagged exchanges (Gitea web UI) are skipped by tag unless --include-web; departures validate expect keys per kind and ignore count/paging headers where a refusal changes a list; ref advertisement of both services and ls-remote stdout are strict notes with departures; ssh authority is normalized; the conflicting PR's settled mergeable is compared by value; the request body and auth principal of each HTTP exchange are compared. Fixtures re-recorded. --- crates/forge/conformance/README.md | 35 ++- crates/forge/conformance/departures.json | 166 ++++++++++--- .../fixtures/1.22.6/B-users-orgs-tokens.json | 2 +- .../conformance/fixtures/1.22.6/C-repos.json | 36 +-- .../fixtures/1.22.6/D-empty-repo.json | 2 +- .../fixtures/1.22.6/E-history-reads.json | 2 +- .../conformance/fixtures/1.22.6/F-pulls.json | 66 ++--- .../conformance/fixtures/1.22.6/G-merge.json | 89 ++++--- .../fixtures/1.22.6/H-statuses.json | 22 +- .../fixtures/1.22.6/K-visibility-probing.json | 76 +++--- .../fixtures/1.22.6/L-force-private.json | 20 +- .../conformance/fixtures/1.22.6/M-names.json | 34 +-- .../fixtures/1.22.6/N-default-branch.json | 20 +- .../fixtures/1.22.6/O-pr-head-lifecycle.json | 113 +++++++-- .../fixtures/1.22.6/P-pagination.json | 230 +++++++++--------- .../fixtures/1.22.6/R-token-scope-edges.json | 2 +- .../fixtures/1.22.6/S-ref-pushes.json | 74 +++++- .../fixtures/1.22.6/T-merge-outcomes.json | 67 +++-- .../fixtures/1.22.6/U-status-check-edges.json | 4 +- .../fixtures/1.22.6/X-auth-forms.json | 14 +- .../conformance/fixtures/1.26.2/A-meta.json | 4 +- .../fixtures/1.26.2/B-users-orgs-tokens.json | 10 +- .../conformance/fixtures/1.26.2/C-repos.json | 44 ++-- .../fixtures/1.26.2/D-empty-repo.json | 20 +- .../fixtures/1.26.2/E-history-reads.json | 16 +- .../conformance/fixtures/1.26.2/F-pulls.json | 68 +++--- .../conformance/fixtures/1.26.2/G-merge.json | 101 ++++---- .../fixtures/1.26.2/H-statuses.json | 26 +- .../fixtures/1.26.2/I-branch-protection.json | 12 +- .../fixtures/1.26.2/J-smart-http.json | 4 +- .../fixtures/1.26.2/K-visibility-probing.json | 96 ++++---- .../fixtures/1.26.2/L-force-private.json | 24 +- .../conformance/fixtures/1.26.2/M-names.json | 32 +-- .../fixtures/1.26.2/N-default-branch.json | 20 +- .../fixtures/1.26.2/O-pr-head-lifecycle.json | 131 +++++++--- .../fixtures/1.26.2/P-pagination.json | 226 ++++++++--------- .../fixtures/1.26.2/R-token-scope-edges.json | 6 +- .../fixtures/1.26.2/S-ref-pushes.json | 74 +++++- .../fixtures/1.26.2/T-merge-outcomes.json | 71 +++--- .../fixtures/1.26.2/U-status-check-edges.json | 4 +- .../fixtures/1.26.2/X-auth-forms.json | 14 +- crates/forge/conformance/run.py | 153 +++++++++--- 42 files changed, 1370 insertions(+), 860 deletions(-) diff --git a/crates/forge/conformance/README.md b/crates/forge/conformance/README.md index 16411afb..de825f76 100644 --- a/crates/forge/conformance/README.md +++ b/crates/forge/conformance/README.md @@ -70,7 +70,12 @@ observations called notes). Exchange N of the run is compared with exchange N of (avatar hash), `mergeable` (flips while a PR is checked), `language` and the open-PR/issue counters (computed asynchronously), repo `size`. The top-level `message`/`errors` of an HTTP error response are compared as text (next bullet). Database counters inside URL fragments (`#issuecomment-7`) are - normalized to placeholders. + normalized to placeholders, and the SSH authority a server derives from its own config + (`ssh://git@localhost:2222/acme/alpha.git`, `git@host:acme/alpha.git`) becomes `<ssh-authority>`, so + `ssh_url` is compared by repo path only. +- The one place `mergeable` is compared by value: the conflicting PR in scenarios G and T. The call polls + until 8 consecutive reads agree (`settle_keys`), the settled value must be `false` when recording, and + the exchange lists `strict_keys: ["mergeable"]` so `check` compares that value too. - Error text: for every recorded exchange with status >= 400 whose body has `message` (or a non-empty `errors`), the actual text must equal the recorded text after normalization: lower case, and only id-shaped trailing details dropped (`[uid: 0, name: ]`, `[id: x, rel_path: ]`, numeric `id:`/`issue_id:` @@ -93,6 +98,30 @@ observations called notes). Exchange N of the run is compared with exchange N of **fails** (record mode raises). `check --strict-first-read` additionally fails when the first read differs from the settled value (for a server that has no such lag, such as sc-forge). +### Unpaired exchanges and errors + +Every unpaired item is a failed exchange and is counted in the `check` totals ("N failed exchange(s)"): +a fixture exchange the run did not produce (the fixture has a trailing extra one), an exchange the run +produced that the fixture lacks, a scenario error the fixture did not record, and a fixture error the run +no longer hits (a different error text is a failure too; the same text is accepted). + +### Web UI exchanges + +Calls tagged `web` hit Gitea's web UI routes (for example `GET /acme/{repo}` answering `303` to the login +page). sc-forge has no web UI, so `check` skips them by default and prints how many it skipped; the slot is +kept so exchange indexes stay aligned. `check --include-web` runs them for real-Gitea comparisons. The skip +is by tag (`tags=["web"]` in the scenario, `"tags": ["web"]` in the fixture); a scenario and fixture that +disagree about the tag fail. `record` always runs and records them, and `diff` compares them like any other +exchange. + +### Ref advertisement probes + +Scenarios O and S record the stdout of `git ls-remote` (a strict note `<step>_stdout`) and the ref names +advertised by `info/refs?service=git-upload-pack` and `git-receive-pack` (notes `*_advertised_refs_*`). +Gitea advertises `refs/pull/N/head`, and other namespaces a collaborator may push; sc-forge advertises only +HEAD, `refs/heads/*` and `refs/tags/*` and hides `refs/forge/*` on both services (`transfer.hideRefs`), so +these notes carry departures with the filtered list. + ### Departures and the gate sc-forge's CI gate is `fixtures/1.22.6` plus `departures.json`. `fixtures/1.26.2` is reference only, for @@ -111,7 +140,9 @@ success, ...), as well as every deliberate sc-forge difference. - The identity is enforced twice: a fixture exchange that no longer matches is a `stale departure`, and an override is refused (`applied to a different exchange`) when the exchange actually produced differs, including for `skip`. -- `expect` keys: `status` (number or list), `message_contains`, `ok` (git), `value` (note; works for +- `expect` keys depend on `kind`: http `status`, `message_contains`, `fields`, `ignore_fields`, + `ignore_headers`, `ignore_body`, `skip`; git `ok`, `message_contains`, `skip`; note `value`, `skip`. + A key that does not apply to the entry's kind is a load error. The keys: `status` (number or list), `message_contains`, `ok` (git), `value` (note; works for `strict=False` notes too), `fields` (pin body values by dotted path, `$len` pins an array length), `ignore_fields` (dotted paths left out of the body comparison), `ignore_headers` (recorded headers left out), `ignore_body` (no body comparison at all) and `skip` (only when unavoidable; say why in `reason`). diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json index 46773277..4a0794c1 100644 --- a/crates/forge/conformance/departures.json +++ b/crates/forge/conformance/departures.json @@ -1,7 +1,7 @@ [ { "scenario": "G", - "exchange": 39, + "exchange": 38, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#8>/merge", "expect": { @@ -14,7 +14,7 @@ }, { "scenario": "T", - "exchange": 20, + "exchange": 19, "kind": "http", "match": "POST /api/v1/repos/acme/outcomes/pulls/<id:path:pulls#6>/merge", "expect": { @@ -27,7 +27,7 @@ }, { "scenario": "G", - "exchange": 43, + "exchange": 42, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>/merge", "expect": { @@ -41,7 +41,7 @@ }, { "scenario": "G", - "exchange": 44, + "exchange": 43, "kind": "note", "match": "squash_merged_immediately_after_merge_call", "expect": { @@ -51,7 +51,7 @@ }, { "scenario": "G", - "exchange": 45, + "exchange": 44, "kind": "note", "match": "squash_merged_within_10s", "expect": { @@ -61,7 +61,7 @@ }, { "scenario": "G", - "exchange": 47, + "exchange": 46, "kind": "http", "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#10>", "expect": { @@ -75,7 +75,7 @@ }, { "scenario": "G", - "exchange": 48, + "exchange": 47, "kind": "note", "match": "squash_parent_count", "expect": { @@ -85,7 +85,7 @@ }, { "scenario": "G", - "exchange": 49, + "exchange": 48, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>/merge", "expect": { @@ -99,7 +99,7 @@ }, { "scenario": "G", - "exchange": 50, + "exchange": 49, "kind": "note", "match": "rebase_merged_immediately_after_merge_call", "expect": { @@ -109,7 +109,7 @@ }, { "scenario": "G", - "exchange": 51, + "exchange": 50, "kind": "note", "match": "rebase_merged_within_10s", "expect": { @@ -119,7 +119,7 @@ }, { "scenario": "G", - "exchange": 53, + "exchange": 52, "kind": "http", "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#11>", "expect": { @@ -133,7 +133,7 @@ }, { "scenario": "G", - "exchange": 54, + "exchange": 53, "kind": "note", "match": "rebase_parent_count", "expect": { @@ -143,7 +143,7 @@ }, { "scenario": "G", - "exchange": 55, + "exchange": 54, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#12>/merge", "expect": { @@ -157,7 +157,7 @@ }, { "scenario": "G", - "exchange": 56, + "exchange": 55, "kind": "note", "match": "rebase_merge_merged_immediately_after_merge_call", "expect": { @@ -167,7 +167,7 @@ }, { "scenario": "G", - "exchange": 57, + "exchange": 56, "kind": "note", "match": "rebase_merge_merged_within_10s", "expect": { @@ -177,7 +177,7 @@ }, { "scenario": "G", - "exchange": 59, + "exchange": 58, "kind": "note", "match": "rebase_merge_parent_count", "expect": { @@ -187,7 +187,7 @@ }, { "scenario": "G", - "exchange": 60, + "exchange": 59, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>/merge", "expect": { @@ -201,7 +201,7 @@ }, { "scenario": "G", - "exchange": 61, + "exchange": 60, "kind": "note", "match": "ff_only_merged_immediately_after_merge_call", "expect": { @@ -211,7 +211,7 @@ }, { "scenario": "G", - "exchange": 62, + "exchange": 61, "kind": "note", "match": "ff_only_merged_within_10s", "expect": { @@ -221,7 +221,7 @@ }, { "scenario": "G", - "exchange": 64, + "exchange": 63, "kind": "http", "match": "GET /api/v1/repos/acme/merges/pulls/<id:path:pulls#13>", "expect": { @@ -235,7 +235,7 @@ }, { "scenario": "G", - "exchange": 65, + "exchange": 64, "kind": "note", "match": "ff_only_parent_count", "expect": { @@ -245,7 +245,7 @@ }, { "scenario": "G", - "exchange": 66, + "exchange": 65, "kind": "http", "match": "POST /api/v1/repos/acme/merges/pulls/<id:path:pulls#14>/merge", "expect": { @@ -318,7 +318,7 @@ }, { "scenario": "G", - "exchange": 73, + "exchange": 72, "kind": "note", "match": "status_gated_merged_immediately_after_merge_call", "expect": { @@ -495,14 +495,18 @@ }, { "scenario": "S", - "exchange": 15, + "exchange": 20, "kind": "http", "match": "GET /api/v1/repos/acme/refs/git/refs", "expect": { "ignore_body": true, "fields": { "$len": 4 - } + }, + "ignore_headers": [ + "link", + "x-total-count" + ] }, "reason": "the ref list holds only refs/heads and refs/tags in sc-forge (4 of 10 recorded refs); the elements differ with the refused refs" }, @@ -614,6 +618,7 @@ ], "ignore_body": true, "ignore_headers": [ + "link", "x-total-count" ] }, @@ -770,6 +775,10 @@ "ignore_fields": [ "total_count", "statuses" + ], + "ignore_headers": [ + "link", + "x-total-count" ] }, "reason": "total_count and the status list include the two states sc-forge refuses; the combined `state` is still compared" @@ -785,7 +794,11 @@ "fields": { "state": "pending", "total_count": 0 - } + }, + "ignore_headers": [ + "link", + "x-total-count" + ] }, "reason": "the only status on this commit was refused: no statuses, combined state pending (1.26.2 behaviour); ignore_body: the recorded body lists that status" }, @@ -819,7 +832,11 @@ "ignore_body": true, "fields": { "$len": 0 - } + }, + "ignore_headers": [ + "link", + "x-total-count" + ] }, "reason": "the status list is empty because the bogus state was refused; ignore_body: the recorded body is a one-element list" }, @@ -972,7 +989,7 @@ }, { "scenario": "O", - "exchange": 14, + "exchange": 20, "kind": "http", "match": "GET /api/v1/repos/acme/life/pulls/<id:path:pulls#3>", "expect": { @@ -984,7 +1001,7 @@ }, { "scenario": "O", - "exchange": 15, + "exchange": 21, "kind": "note", "match": "merged_pr_head_sha_frozen", "expect": { @@ -994,7 +1011,7 @@ }, { "scenario": "O", - "exchange": 16, + "exchange": 22, "kind": "note", "match": "merged_pr_head_sha_follows_new_branch", "expect": { @@ -1028,6 +1045,95 @@ }, "reason": "sc-forge answers 404, not Gitea's 403 'Push to create is not enabled'" }, + { + "scenario": "O", + "exchange": 5, + "kind": "note", + "match": "ls-remote-pull-refs_stdout", + "expect": { + "value": "" + }, + "reason": "no refs/pull/* is advertised by sc-forge (it keeps refs/forge/pull/*, hidden). sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "O", + "exchange": 12, + "kind": "note", + "match": "ls-remote-pull-refs-after-delete_stdout", + "expect": { + "value": "" + }, + "reason": "no refs/pull/* is advertised by sc-forge (it keeps refs/forge/pull/*, hidden). sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "O", + "exchange": 14, + "kind": "note", + "match": "life_advertised_refs_upload_pack", + "expect": { + "value": [ + "HEAD", + "refs/heads/l1", + "refs/heads/main" + ] + }, + "reason": "sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "O", + "exchange": 16, + "kind": "note", + "match": "life_advertised_refs_receive_pack", + "expect": { + "value": [ + "refs/heads/l1", + "refs/heads/main" + ] + }, + "reason": "sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "S", + "exchange": 15, + "kind": "note", + "match": "ls-remote-all-refs_stdout", + "expect": { + "value": "<sha#3>\tHEAD\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" + }, + "reason": "sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "S", + "exchange": 17, + "kind": "note", + "match": "refs_advertised_refs_upload_pack", + "expect": { + "value": [ + "HEAD", + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/tags/annot", + "refs/tags/annot^{}" + ] + }, + "reason": "sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, + { + "scenario": "S", + "exchange": 19, + "kind": "note", + "match": "refs_advertised_refs_receive_pack", + "expect": { + "value": [ + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/tags/annot" + ] + }, + "reason": "sc-forge advertises only HEAD, refs/heads/* and refs/tags/* (refs/forge/* is hidden by transfer.hideRefs on both services); Gitea also advertises refs/pull/*, refs/replace/*, refs/notes/*, refs/changes/*, refs/keep-around/*, refs/custom/*" + }, { "scenario": "B", "exchange": 13, diff --git a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json index 4f27012e..5d9d8371 100644 --- a/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.22.6/B-users-orgs-tokens.json @@ -674,7 +674,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/C-repos.json b/crates/forge/conformance/fixtures/1.22.6/C-repos.json index e3a8010f..d20d4836 100644 --- a/crates/forge/conformance/fixtures/1.22.6/C-repos.json +++ b/crates/forge/conformance/fixtures/1.22.6/C-repos.json @@ -61,7 +61,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -193,7 +193,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -295,7 +295,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -397,7 +397,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -517,7 +517,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -622,7 +622,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -727,7 +727,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -925,7 +925,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1109,7 +1109,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<ssh-authority>/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1217,7 +1217,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1543,7 +1543,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1645,7 +1645,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1747,7 +1747,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1853,7 +1853,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2210,7 +2210,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json index 35d26005..cd9ab425 100644 --- a/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.22.6/D-empty-repo.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json index 66ba8640..dbd7fd6e 100644 --- a/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.22.6/E-history-reads.json @@ -54,7 +54,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json index 8c6e5615..4b27e791 100644 --- a/crates/forge/conformance/fixtures/1.22.6/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.22.6/F-pulls.json @@ -118,7 +118,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -216,7 +216,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -413,7 +413,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -511,7 +511,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -761,7 +761,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -859,7 +859,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -964,7 +964,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1017,7 +1017,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1115,7 +1115,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1295,7 +1295,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1393,7 +1393,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1498,7 +1498,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1551,7 +1551,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1649,7 +1649,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1777,7 +1777,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -1830,7 +1830,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1928,7 +1928,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2073,7 +2073,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2126,7 +2126,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2224,7 +2224,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2403,7 +2403,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2501,7 +2501,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2606,7 +2606,7 @@ "html_url": "<base>/acme/prs/pulls/1", "diff_url": "<base>/acme/prs/pulls/1.diff", "patch_url": "<base>/acme/prs/pulls/1.patch", - "mergeable": false, + "mergeable": true, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -2659,7 +2659,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2757,7 +2757,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3104,7 +3104,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3202,7 +3202,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3375,7 +3375,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3473,7 +3473,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3645,7 +3645,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3743,7 +3743,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3917,7 +3917,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4015,7 +4015,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/G-merge.json b/crates/forge/conformance/fixtures/1.22.6/G-merge.json index b824b784..a12a22ec 100644 --- a/crates/forge/conformance/fixtures/1.22.6/G-merge.json +++ b/crates/forge/conformance/fixtures/1.22.6/G-merge.json @@ -74,7 +74,7 @@ "html_url": "<base>/acme/merges/pulls/1", "diff_url": "<base>/acme/merges/pulls/1.diff", "patch_url": "<base>/acme/merges/pulls/1.patch", - "mergeable": true, + "mergeable": false, "merged": false, "merged_at": null, "merge_commit_sha": null, @@ -121,13 +121,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -219,13 +219,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -444,13 +444,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -542,13 +542,13 @@ "template": false, "parent": null, "mirror": false, - "size": 23, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -820,7 +820,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -918,7 +918,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1147,13 +1147,13 @@ "template": false, "parent": null, "mirror": false, - "size": 27, + "size": 29, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1245,13 +1245,13 @@ "template": false, "parent": null, "mirror": false, - "size": 27, + "size": 29, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1485,7 +1485,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1583,7 +1583,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1771,7 +1771,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1869,7 +1869,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2045,7 +2045,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2143,7 +2143,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2214,12 +2214,6 @@ "headers": {}, "body_text": "" }, - { - "kind": "note", - "key": "conflicting_pr_mergeable_after_8s", - "value": false, - "strict": false - }, { "kind": "http", "method": "GET", @@ -2329,7 +2323,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2427,7 +2421,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2484,7 +2478,10 @@ "updated_at": "<ts>", "closed_at": null, "pin_order": 0 - } + }, + "strict_keys": [ + "mergeable" + ] }, { "kind": "http", @@ -2615,7 +2612,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2713,7 +2710,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2899,7 +2896,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2997,7 +2994,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3219,7 +3216,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3317,7 +3314,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3468,7 +3465,7 @@ "html_url": "<base>/acme/merges/pulls/12", "diff_url": "<base>/acme/merges/pulls/12.diff", "patch_url": "<base>/acme/merges/pulls/12.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#17>", @@ -3539,13 +3536,13 @@ "template": false, "parent": null, "mirror": false, - "size": 41, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3637,13 +3634,13 @@ "template": false, "parent": null, "mirror": false, - "size": 41, + "size": 40, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3830,7 +3827,7 @@ "html_url": "<base>/acme/merges/pulls/14", "diff_url": "<base>/acme/merges/pulls/14.diff", "patch_url": "<base>/acme/merges/pulls/14.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#19>", @@ -3907,7 +3904,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4005,7 +4002,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4196,7 +4193,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4294,7 +4291,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json index 5a6661f2..c2d7c479 100644 --- a/crates/forge/conformance/fixtures/1.22.6/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.22.6/H-statuses.json @@ -190,13 +190,13 @@ "template": false, "parent": null, "mirror": false, - "size": 25, + "size": 23, "language": "", "languages_url": "<base>/api/v1/repos/acme/status/languages", "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -862,7 +862,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1101,7 +1101,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1375,7 +1375,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1684,7 +1684,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1942,7 +1942,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2742,7 +2742,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3166,7 +3166,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3392,7 +3392,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json index 095de389..456068f4 100644 --- a/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.22.6/K-visibility-probing.json @@ -478,7 +478,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -725,6 +725,9 @@ "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -750,6 +753,9 @@ "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -775,6 +781,9 @@ "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -801,6 +810,9 @@ "body_text": "<a href=\"/user/login\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -897,7 +909,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -989,7 +1001,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1081,7 +1093,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1173,7 +1185,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1265,7 +1277,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1357,7 +1369,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1449,7 +1461,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1541,7 +1553,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1633,7 +1645,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1741,7 +1753,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1833,7 +1845,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1925,7 +1937,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2017,7 +2029,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2109,7 +2121,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2201,7 +2213,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2293,7 +2305,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2385,7 +2397,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2477,7 +2489,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2569,7 +2581,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2661,7 +2673,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2753,7 +2765,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2845,7 +2857,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<ssh-authority>/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3005,7 +3017,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3097,7 +3109,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3189,7 +3201,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3281,7 +3293,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3373,7 +3385,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3465,7 +3477,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3557,7 +3569,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3649,7 +3661,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3741,7 +3753,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json index 59eadf9e..be5407c2 100644 --- a/crates/forge/conformance/fixtures/1.22.6/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.22.6/L-force-private.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -161,7 +161,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -266,7 +266,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -368,7 +368,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -473,7 +473,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -578,7 +578,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -684,7 +684,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://<ssh-authority>/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -790,7 +790,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://<ssh-authority>/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -923,7 +923,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://<ssh-authority>/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1079,7 +1079,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://<ssh-authority>/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/M-names.json b/crates/forge/conformance/fixtures/1.22.6/M-names.json index 22071164..23271938 100644 --- a/crates/forge/conformance/fixtures/1.22.6/M-names.json +++ b/crates/forge/conformance/fixtures/1.22.6/M-names.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -298,7 +298,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -400,7 +400,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -542,7 +542,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://<ssh-authority>/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -648,7 +648,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://<ssh-authority>/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -844,7 +844,7 @@ "html_url": "<base>/acme/a..b", "url": "<base>/api/v1/repos/acme/a..b", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/a..b.git", + "ssh_url": "ssh://<ssh-authority>/acme/a..b.git", "clone_url": "<base>/acme/a..b.git", "original_url": "", "website": "", @@ -950,7 +950,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "ssh_url": "ssh://<ssh-authority>/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -1056,7 +1056,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "ssh_url": "ssh://<ssh-authority>/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1162,7 +1162,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "ssh_url": "ssh://<ssh-authority>/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1268,7 +1268,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "ssh_url": "ssh://<ssh-authority>/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1392,7 +1392,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://<ssh-authority>/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1873,7 +1873,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://<ssh-authority>/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1978,7 +1978,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2092,7 +2092,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2255,7 +2255,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2360,7 +2360,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json index 52acc0e1..9191cc35 100644 --- a/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.22.6/N-default-branch.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -162,7 +162,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -264,7 +264,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -534,7 +534,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -645,7 +645,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -756,7 +756,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -929,7 +929,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1040,7 +1040,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1151,7 +1151,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1275,7 +1275,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json index 667e1588..947866d0 100644 --- a/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.22.6/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -210,7 +210,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -384,7 +384,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -482,7 +482,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -817,6 +817,12 @@ "ok": true, "output": "<sha#3>\trefs/pull/1/head" }, + { + "kind": "note", + "key": "ls-remote-pull-refs_stdout", + "value": "<sha#3>\trefs/pull/1/head", + "strict": true + }, { "kind": "http", "method": "DELETE", @@ -935,7 +941,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1033,7 +1039,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1203,7 +1209,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1301,7 +1307,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1488,7 +1494,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1586,7 +1592,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1652,6 +1658,63 @@ "ok": true, "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" }, + { + "kind": "note", + "key": "ls-remote-pull-refs-after-delete_stdout", + "value": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/life.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n003b<sha#3> refs/heads/l1\n003d<sha#1> refs/heads/main\n003e<sha#3> refs/pull/1/head\n003e<sha#4> refs/pull/2/head\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "life_advertised_refs_upload_pack", + "value": [ + "HEAD", + "refs/heads/l1", + "refs/heads/main", + "refs/pull/1/head", + "refs/pull/2/head" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/life.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000bc<sha#3> refs/heads/l1\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n003d<sha#1> refs/heads/main\n003e<sha#3> refs/pull/1/head\n003e<sha#4> refs/pull/2/head\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "life_advertised_refs_receive_pack", + "value": [ + "refs/heads/l1", + "refs/heads/main", + "refs/pull/1/head", + "refs/pull/2/head" + ], + "strict": true + }, { "kind": "http", "method": "GET", @@ -1796,7 +1859,7 @@ "html_url": "<base>/acme/life/pulls/3", "diff_url": "<base>/acme/life/pulls/3.diff", "patch_url": "<base>/acme/life/pulls/3.patch", - "mergeable": true, + "mergeable": false, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#5>", @@ -1873,7 +1936,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1971,7 +2034,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2154,7 +2217,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2252,7 +2315,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2429,7 +2492,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2527,7 +2590,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2698,7 +2761,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2796,7 +2859,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2964,7 +3027,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3062,7 +3125,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3246,7 +3309,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3344,7 +3407,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json index c45c4d88..e7f56bc3 100644 --- a/crates/forge/conformance/fixtures/1.22.6/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.22.6/P-pagination.json @@ -115,7 +115,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -213,7 +213,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -371,7 +371,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -469,7 +469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -739,7 +739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -897,7 +897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1167,7 +1167,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1265,7 +1265,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1437,7 +1437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1535,7 +1535,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1693,7 +1693,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1791,7 +1791,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1963,7 +1963,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2219,7 +2219,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2317,7 +2317,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2488,7 +2488,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2586,7 +2586,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2744,7 +2744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2842,7 +2842,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3000,7 +3000,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3098,7 +3098,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3256,7 +3256,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3354,7 +3354,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3512,7 +3512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3610,7 +3610,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3787,7 +3787,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3885,7 +3885,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4043,7 +4043,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4141,7 +4141,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4299,7 +4299,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4397,7 +4397,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4555,7 +4555,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4653,7 +4653,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4811,7 +4811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4909,7 +4909,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5086,7 +5086,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5184,7 +5184,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5342,7 +5342,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5440,7 +5440,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5598,7 +5598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5696,7 +5696,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5854,7 +5854,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5952,7 +5952,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6110,7 +6110,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6208,7 +6208,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6385,7 +6385,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6483,7 +6483,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6641,7 +6641,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6739,7 +6739,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6897,7 +6897,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6995,7 +6995,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7153,7 +7153,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7251,7 +7251,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7409,7 +7409,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7507,7 +7507,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7684,7 +7684,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7782,7 +7782,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7940,7 +7940,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8038,7 +8038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8196,7 +8196,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8294,7 +8294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8452,7 +8452,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8550,7 +8550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8708,7 +8708,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8806,7 +8806,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8983,7 +8983,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9081,7 +9081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9239,7 +9239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9337,7 +9337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9495,7 +9495,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9593,7 +9593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9751,7 +9751,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9849,7 +9849,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10105,7 +10105,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10276,7 +10276,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10374,7 +10374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10532,7 +10532,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10630,7 +10630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10788,7 +10788,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10886,7 +10886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11044,7 +11044,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11142,7 +11142,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11300,7 +11300,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11398,7 +11398,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11569,7 +11569,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11667,7 +11667,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11825,7 +11825,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11923,7 +11923,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12081,7 +12081,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12179,7 +12179,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12337,7 +12337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12435,7 +12435,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12593,7 +12593,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12691,7 +12691,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12862,7 +12862,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12960,7 +12960,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13118,7 +13118,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13216,7 +13216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13374,7 +13374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13472,7 +13472,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13630,7 +13630,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13886,7 +13886,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13984,7 +13984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14947,13 +14947,13 @@ "template": false, "parent": null, "mirror": false, - "size": 40, + "size": 28, "language": "", "languages_url": "<base>/api/v1/repos/acme/pages/languages", "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15129,13 +15129,13 @@ "template": false, "parent": null, "mirror": false, - "size": 40, + "size": 28, "language": "", "languages_url": "<base>/api/v1/repos/acme/pages/languages", "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15245,7 +15245,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15337,7 +15337,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15446,7 +15446,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json index fc8ed127..cbdf7fde 100644 --- a/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/R-token-scope-edges.json @@ -423,7 +423,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://<ssh-authority>/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json index 6bceb04f..4da2d8e1 100644 --- a/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.22.6/S-ref-pushes.json @@ -131,6 +131,76 @@ "ok": true, "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" }, + { + "kind": "note", + "key": "ls-remote-all-refs_stdout", + "value": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/refs.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n00000146<sha#3> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.45.2\n003e<sha#1> refs/changes/1/2\n003f<sha#1> refs/custom/thing\n003d<sha#3> refs/heads/main\n0044<sha#1> refs/heads/pull/1/head\n003b<sha#2> refs/heads/r1\n0067<sha#1> refs/keep-around/<sha#1>\n0040<sha#1> refs/notes/commits\n003e<sha#2> refs/pull/1/head\n0063<sha#1> refs/replace/<sha#2>\n003d<sha#4> refs/tags/annot\n0040<sha#1> refs/tags/annot^{}\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "refs_advertised_refs_upload_pack", + "value": [ + "HEAD", + "refs/changes/1/2", + "refs/custom/thing", + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/keep-around/<sha#1>", + "refs/notes/commits", + "refs/pull/1/head", + "refs/replace/<sha#2>", + "refs/tags/annot", + "refs/tags/annot^{}" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/refs.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000bf<sha#1> refs/changes/1/2\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.45.2\n003f<sha#1> refs/custom/thing\n003d<sha#3> refs/heads/main\n0044<sha#1> refs/heads/pull/1/head\n003b<sha#2> refs/heads/r1\n0067<sha#1> refs/keep-around/<sha#1>\n0040<sha#1> refs/notes/commits\n003e<sha#2> refs/pull/1/head\n0063<sha#1> refs/replace/<sha#2>\n003d<sha#4> refs/tags/annot\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "refs_advertised_refs_receive_pack", + "value": [ + "refs/changes/1/2", + "refs/custom/thing", + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/keep-around/<sha#1>", + "refs/notes/commits", + "refs/pull/1/head", + "refs/replace/<sha#2>", + "refs/tags/annot" + ], + "strict": true + }, { "kind": "http", "method": "GET", @@ -367,7 +437,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<ssh-authority>/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -465,7 +535,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<ssh-authority>/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json index abc23e30..1f4086cb 100644 --- a/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.22.6/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -215,7 +215,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -386,7 +386,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -484,7 +484,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -685,7 +685,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -783,7 +783,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -959,7 +959,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1057,7 +1057,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1536,7 +1536,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1634,7 +1634,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1810,7 +1810,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1908,7 +1908,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2079,7 +2079,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2177,7 +2177,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2368,7 +2368,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2466,7 +2466,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2637,7 +2637,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2735,7 +2735,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2942,7 +2942,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3040,7 +3040,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3131,12 +3131,6 @@ "headers": {}, "body_text": "" }, - { - "kind": "note", - "key": "conflicting_pr_mergeable_after_8s", - "value": false, - "strict": false - }, { "kind": "http", "method": "GET", @@ -3246,7 +3240,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3344,7 +3338,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3401,7 +3395,10 @@ "updated_at": "<ts>", "closed_at": null, "pin_order": 0 - } + }, + "strict_keys": [ + "mergeable" + ] }, { "kind": "http", @@ -3532,7 +3529,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3630,7 +3627,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3798,7 +3795,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3896,7 +3893,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json index 036e062e..c2f44955 100644 --- a/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.22.6/U-status-check-edges.json @@ -298,7 +298,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<ssh-authority>/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<ssh-authority>/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json index 3a1148b5..92a9db0c 100644 --- a/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.22.6/X-auth-forms.json @@ -89,7 +89,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -275,7 +275,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -461,7 +461,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -647,7 +647,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -833,7 +833,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1019,7 +1019,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1205,7 +1205,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/A-meta.json b/crates/forge/conformance/fixtures/1.26.2/A-meta.json index 45a472ff..1658eb0f 100644 --- a/crates/forge/conformance/fixtures/1.26.2/A-meta.json +++ b/crates/forge/conformance/fixtures/1.26.2/A-meta.json @@ -156,9 +156,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json index dcb3db97..cbf076dd 100644 --- a/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json +++ b/crates/forge/conformance/fixtures/1.26.2/B-users-orgs-tokens.json @@ -687,7 +687,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -877,9 +877,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "HasOrgOrUserVisible", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -924,9 +924,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/C-repos.json b/crates/forge/conformance/fixtures/1.26.2/C-repos.json index cf9301a1..6588a887 100644 --- a/crates/forge/conformance/fixtures/1.26.2/C-repos.json +++ b/crates/forge/conformance/fixtures/1.26.2/C-repos.json @@ -60,7 +60,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -196,7 +196,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -302,7 +302,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -408,7 +408,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -532,7 +532,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -641,7 +641,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -750,7 +750,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -860,7 +860,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -956,7 +956,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -1052,7 +1052,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -1148,7 +1148,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<ssh-authority>/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -1260,7 +1260,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1328,9 +1328,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "url": "<base>/api/swagger", "errors": null, - "message": "not found" + "message": "not found", + "url": "<base>/api/swagger" } }, { @@ -1590,7 +1590,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1696,7 +1696,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1802,7 +1802,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1912,7 +1912,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -2127,7 +2127,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2202,9 +2202,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -2277,7 +2277,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json index 26ed82c4..e4c34c57 100644 --- a/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json +++ b/crates/forge/conformance/fixtures/1.26.2/D-empty-repo.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -159,9 +159,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -204,11 +204,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", + "url": "<base>/api/swagger", "errors": [ "object does not exist [id: main, rel_path: ]" - ], - "message": "not found", - "url": "<base>/api/swagger" + ] } }, { @@ -221,11 +221,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", "errors": [ "object does not exist [id: main, rel_path: ]" - ] + ], + "message": "not found" } }, { @@ -252,9 +252,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "commit doesn't exist: HEAD", "url": "<base>/api/swagger", - "errors": null, - "message": "commit doesn't exist: HEAD" + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json index 7ca5b6a6..c920758c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json +++ b/crates/forge/conformance/fixtures/1.26.2/E-history-reads.json @@ -53,7 +53,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -355,9 +355,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -442,9 +442,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -1804,11 +1804,11 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", + "url": "<base>/api/swagger", "errors": [ "object does not exist [id: nope, rel_path: ]" - ], - "message": "not found", - "url": "<base>/api/swagger" + ] } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json index 4dcdaf11..1869e7e2 100644 --- a/crates/forge/conformance/fixtures/1.26.2/F-pulls.json +++ b/crates/forge/conformance/fixtures/1.26.2/F-pulls.json @@ -112,13 +112,13 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -214,13 +214,13 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -417,13 +417,13 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -519,13 +519,13 @@ "fork": false, "template": false, "mirror": false, - "size": 23, + "size": 24, "language": "", "languages_url": "<base>/api/v1/repos/acme/prs/languages", "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -647,9 +647,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -778,7 +778,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -880,7 +880,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1041,7 +1041,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1143,7 +1143,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1326,7 +1326,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1428,7 +1428,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1589,7 +1589,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1691,7 +1691,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1878,7 +1878,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1980,7 +1980,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2184,7 +2184,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2286,7 +2286,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2468,7 +2468,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2570,7 +2570,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2731,7 +2731,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2833,7 +2833,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3186,7 +3186,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3288,7 +3288,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3464,7 +3464,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3566,7 +3566,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3744,7 +3744,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3846,7 +3846,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4026,7 +4026,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -4128,7 +4128,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/G-merge.json b/crates/forge/conformance/fixtures/1.26.2/G-merge.json index 7d2773c0..c798a053 100644 --- a/crates/forge/conformance/fixtures/1.26.2/G-merge.json +++ b/crates/forge/conformance/fixtures/1.26.2/G-merge.json @@ -127,7 +127,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -229,7 +229,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -460,7 +460,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -562,7 +562,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -680,13 +680,13 @@ { "kind": "note", "key": "immediate_merge_status", - "value": 200, + "value": 405, "strict": false }, { "kind": "note", "key": "immediate_merge_message", - "value": "", + "value": "Please try again later", "strict": false }, { @@ -840,7 +840,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -942,7 +942,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1183,7 +1183,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1285,7 +1285,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1525,7 +1525,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1627,7 +1627,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1821,7 +1821,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1923,7 +1923,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2105,7 +2105,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2207,7 +2207,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2284,12 +2284,6 @@ "headers": {}, "body_text": "" }, - { - "kind": "note", - "key": "conflicting_pr_mergeable_after_8s", - "value": false, - "strict": false - }, { "kind": "http", "method": "GET", @@ -2393,13 +2387,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2495,13 +2489,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2564,7 +2558,10 @@ "closed_at": null, "pin_order": 0, "content_version": 0 - } + }, + "strict_keys": [ + "mergeable" + ] }, { "kind": "http", @@ -2689,13 +2686,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2791,13 +2788,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2875,9 +2872,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -2983,13 +2980,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3085,13 +3082,13 @@ "fork": false, "template": false, "mirror": false, - "size": 32, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3243,7 +3240,7 @@ "html_url": "<base>/acme/merges/pulls/11", "diff_url": "<base>/acme/merges/pulls/11.diff", "patch_url": "<base>/acme/merges/pulls/11.patch", - "mergeable": false, + "mergeable": true, "merged": true, "merged_at": "<ts>", "merge_commit_sha": "<sha#15>", @@ -3313,13 +3310,13 @@ "fork": false, "template": false, "mirror": false, - "size": 34, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3415,13 +3412,13 @@ "fork": false, "template": false, "mirror": false, - "size": 34, + "size": 31, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3649,13 +3646,13 @@ "fork": false, "template": false, "mirror": false, - "size": 36, + "size": 35, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3751,13 +3748,13 @@ "fork": false, "template": false, "mirror": false, - "size": 36, + "size": 35, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4021,13 +4018,13 @@ "fork": false, "template": false, "mirror": false, - "size": 40, + "size": 41, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4123,13 +4120,13 @@ "fork": false, "template": false, "mirror": false, - "size": 40, + "size": 41, "language": "", "languages_url": "<base>/api/v1/repos/acme/merges/languages", "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4326,7 +4323,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -4428,7 +4425,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json index 20e0de3c..ac2c72af 100644 --- a/crates/forge/conformance/fixtures/1.26.2/H-statuses.json +++ b/crates/forge/conformance/fixtures/1.26.2/H-statuses.json @@ -59,7 +59,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -291,7 +291,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -499,7 +499,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -965,7 +965,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1208,7 +1208,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1486,7 +1486,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1799,7 +1799,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2061,7 +2061,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2865,7 +2865,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3145,9 +3145,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -3293,7 +3293,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3521,7 +3521,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json index 29efade9..388c3d4e 100644 --- a/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json +++ b/crates/forge/conformance/fixtures/1.26.2/I-branch-protection.json @@ -197,9 +197,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -390,9 +390,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "message": "not found", "url": "<base>/api/swagger", - "errors": null, - "message": "not found" + "errors": null } }, { @@ -429,9 +429,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json index 66cff5d2..42b56366 100644 --- a/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json +++ b/crates/forge/conformance/fixtures/1.26.2/J-smart-http.json @@ -621,9 +621,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { diff --git a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json index 6a5033ad..c2c585b7 100644 --- a/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json +++ b/crates/forge/conformance/fixtures/1.26.2/K-visibility-probing.json @@ -306,9 +306,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -321,9 +321,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -379,9 +379,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -394,9 +394,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } }, { @@ -477,7 +477,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -655,9 +655,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "errors": null, "message": "not found", - "url": "<base>/api/swagger" + "url": "<base>/api/swagger", + "errors": null } }, { @@ -731,6 +731,9 @@ "body_text": "<a href=\"/user/login?redirect_to=%2Facme%2Fvis\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -756,6 +759,9 @@ "body_text": "<a href=\"/user/login?redirect_to=%2Facme%2Fghost\">See Other</a>.\n\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -780,6 +786,9 @@ "body_text": "Not found.\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -805,6 +814,9 @@ "body_text": "Not found.\n", "volatile": [ "$text" + ], + "tags": [ + "web" ] }, { @@ -900,7 +912,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -996,7 +1008,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1092,7 +1104,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -1188,7 +1200,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -1284,7 +1296,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -1380,7 +1392,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -1476,7 +1488,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -1572,7 +1584,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -1668,7 +1680,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -1780,7 +1792,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -1876,7 +1888,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -1972,7 +1984,7 @@ "html_url": "<base>/acme/doomed", "url": "<base>/api/v1/repos/acme/doomed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/doomed.git", + "ssh_url": "ssh://<ssh-authority>/acme/doomed.git", "clone_url": "<base>/acme/doomed.git", "original_url": "", "website": "", @@ -2068,7 +2080,7 @@ "html_url": "<base>/acme/empty", "url": "<base>/api/v1/repos/acme/empty", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/empty.git", + "ssh_url": "ssh://<ssh-authority>/acme/empty.git", "clone_url": "<base>/acme/empty.git", "original_url": "", "website": "", @@ -2164,7 +2176,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -2260,7 +2272,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -2356,7 +2368,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -2452,7 +2464,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -2548,7 +2560,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -2644,7 +2656,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -2740,7 +2752,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", @@ -2836,7 +2848,7 @@ "html_url": "<base>/alice/scoped", "url": "<base>/api/v1/repos/alice/scoped", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/scoped.git", + "ssh_url": "ssh://<ssh-authority>/alice/scoped.git", "clone_url": "<base>/alice/scoped.git", "original_url": "", "website": "", @@ -2932,7 +2944,7 @@ "html_url": "<base>/<admin>/probe", "url": "<base>/api/v1/repos/<admin>/probe", "link": "", - "ssh_url": "ssh://git@localhost:2222/<admin>/probe.git", + "ssh_url": "ssh://<ssh-authority>/<admin>/probe.git", "clone_url": "<base>/<admin>/probe.git", "original_url": "", "website": "", @@ -3096,7 +3108,7 @@ "html_url": "<base>/acme/alpha", "url": "<base>/api/v1/repos/acme/alpha", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/alpha.git", + "ssh_url": "ssh://<ssh-authority>/acme/alpha.git", "clone_url": "<base>/acme/alpha.git", "original_url": "", "website": "", @@ -3192,7 +3204,7 @@ "html_url": "<base>/acme/blank", "url": "<base>/api/v1/repos/acme/blank", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/blank.git", + "ssh_url": "ssh://<ssh-authority>/acme/blank.git", "clone_url": "<base>/acme/blank.git", "original_url": "", "website": "", @@ -3288,7 +3300,7 @@ "html_url": "<base>/acme/hist", "url": "<base>/api/v1/repos/acme/hist", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/hist.git", + "ssh_url": "ssh://<ssh-authority>/acme/hist.git", "clone_url": "<base>/acme/hist.git", "original_url": "", "website": "", @@ -3384,7 +3396,7 @@ "html_url": "<base>/acme/prs", "url": "<base>/api/v1/repos/acme/prs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prs.git", + "ssh_url": "ssh://<ssh-authority>/acme/prs.git", "clone_url": "<base>/acme/prs.git", "original_url": "", "website": "", @@ -3480,7 +3492,7 @@ "html_url": "<base>/acme/merges", "url": "<base>/api/v1/repos/acme/merges", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/merges.git", + "ssh_url": "ssh://<ssh-authority>/acme/merges.git", "clone_url": "<base>/acme/merges.git", "original_url": "", "website": "", @@ -3576,7 +3588,7 @@ "html_url": "<base>/acme/status", "url": "<base>/api/v1/repos/acme/status", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/status.git", + "ssh_url": "ssh://<ssh-authority>/acme/status.git", "clone_url": "<base>/acme/status.git", "original_url": "", "website": "", @@ -3672,7 +3684,7 @@ "html_url": "<base>/acme/prot", "url": "<base>/api/v1/repos/acme/prot", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/prot.git", + "ssh_url": "ssh://<ssh-authority>/acme/prot.git", "clone_url": "<base>/acme/prot.git", "original_url": "", "website": "", @@ -3768,7 +3780,7 @@ "html_url": "<base>/acme/smart", "url": "<base>/api/v1/repos/acme/smart", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/smart.git", + "ssh_url": "ssh://<ssh-authority>/acme/smart.git", "clone_url": "<base>/acme/smart.git", "original_url": "", "website": "", @@ -3864,7 +3876,7 @@ "html_url": "<base>/acme/vis", "url": "<base>/api/v1/repos/acme/vis", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/vis.git", + "ssh_url": "ssh://<ssh-authority>/acme/vis.git", "clone_url": "<base>/acme/vis.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json index 15a8b115..ca50bf14 100644 --- a/crates/forge/conformance/fixtures/1.26.2/L-force-private.json +++ b/crates/forge/conformance/fixtures/1.26.2/L-force-private.json @@ -58,7 +58,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -164,7 +164,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -273,7 +273,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -379,7 +379,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -488,7 +488,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -597,7 +597,7 @@ "html_url": "<base>/acme/pub1", "url": "<base>/api/v1/repos/acme/pub1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pub1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pub1.git", "clone_url": "<base>/acme/pub1.git", "original_url": "", "website": "", @@ -707,7 +707,7 @@ "html_url": "<base>/acme/nodef", "url": "<base>/api/v1/repos/acme/nodef", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/nodef.git", + "ssh_url": "ssh://<ssh-authority>/acme/nodef.git", "clone_url": "<base>/acme/nodef.git", "original_url": "", "website": "", @@ -817,7 +817,7 @@ "html_url": "<base>/alice/pub2", "url": "<base>/api/v1/repos/alice/pub2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/pub2.git", + "ssh_url": "ssh://<ssh-authority>/alice/pub2.git", "clone_url": "<base>/alice/pub2.git", "original_url": "", "website": "", @@ -896,9 +896,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "message": "not found", "url": "<base>/api/swagger", - "errors": null + "errors": null, + "message": "not found" } }, { @@ -954,7 +954,7 @@ "html_url": "<base>/alice/nodef2", "url": "<base>/api/v1/repos/alice/nodef2", "link": "", - "ssh_url": "ssh://git@localhost:2222/alice/nodef2.git", + "ssh_url": "ssh://<ssh-authority>/alice/nodef2.git", "clone_url": "<base>/alice/nodef2.git", "original_url": "", "website": "", @@ -1114,7 +1114,7 @@ "html_url": "<base>/pubco/pubrepo", "url": "<base>/api/v1/repos/pubco/pubrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/pubco/pubrepo.git", + "ssh_url": "ssh://<ssh-authority>/pubco/pubrepo.git", "clone_url": "<base>/pubco/pubrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/M-names.json b/crates/forge/conformance/fixtures/1.26.2/M-names.json index af2eef90..0589cc57 100644 --- a/crates/forge/conformance/fixtures/1.26.2/M-names.json +++ b/crates/forge/conformance/fixtures/1.26.2/M-names.json @@ -57,7 +57,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -199,7 +199,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -305,7 +305,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -411,7 +411,7 @@ "html_url": "<base>/acme/Mixed", "url": "<base>/api/v1/repos/acme/Mixed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Mixed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Mixed.git", "clone_url": "<base>/acme/Mixed.git", "original_url": "", "website": "", @@ -557,7 +557,7 @@ "html_url": "<base>/acme/.hidden", "url": "<base>/api/v1/repos/acme/.hidden", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/.hidden.git", + "ssh_url": "ssh://<ssh-authority>/acme/.hidden.git", "clone_url": "<base>/acme/.hidden.git", "original_url": "", "website": "", @@ -667,7 +667,7 @@ "html_url": "<base>/acme/-dash", "url": "<base>/api/v1/repos/acme/-dash", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/-dash.git", + "ssh_url": "ssh://<ssh-authority>/acme/-dash.git", "clone_url": "<base>/acme/-dash.git", "original_url": "", "website": "", @@ -885,7 +885,7 @@ "html_url": "<base>/acme/api", "url": "<base>/api/v1/repos/acme/api", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/api.git", + "ssh_url": "ssh://<ssh-authority>/acme/api.git", "clone_url": "<base>/acme/api.git", "original_url": "", "website": "", @@ -995,7 +995,7 @@ "html_url": "<base>/acme/admin", "url": "<base>/api/v1/repos/acme/admin", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/admin.git", + "ssh_url": "ssh://<ssh-authority>/acme/admin.git", "clone_url": "<base>/acme/admin.git", "original_url": "", "website": "", @@ -1105,7 +1105,7 @@ "html_url": "<base>/acme/user", "url": "<base>/api/v1/repos/acme/user", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/user.git", + "ssh_url": "ssh://<ssh-authority>/acme/user.git", "clone_url": "<base>/acme/user.git", "original_url": "", "website": "", @@ -1215,7 +1215,7 @@ "html_url": "<base>/acme/assets", "url": "<base>/api/v1/repos/acme/assets", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/assets.git", + "ssh_url": "ssh://<ssh-authority>/acme/assets.git", "clone_url": "<base>/acme/assets.git", "original_url": "", "website": "", @@ -1343,7 +1343,7 @@ "html_url": "<base>/acme/ok_name-1.x", "url": "<base>/api/v1/repos/acme/ok_name-1.x", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/ok_name-1.x.git", + "ssh_url": "ssh://<ssh-authority>/acme/ok_name-1.x.git", "clone_url": "<base>/acme/ok_name-1.x.git", "original_url": "", "website": "", @@ -1837,7 +1837,7 @@ "html_url": "<base>/acme/rename-me", "url": "<base>/api/v1/repos/acme/rename-me", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/rename-me.git", + "ssh_url": "ssh://<ssh-authority>/acme/rename-me.git", "clone_url": "<base>/acme/rename-me.git", "original_url": "", "website": "", @@ -1946,7 +1946,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2064,7 +2064,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", @@ -2231,7 +2231,7 @@ "html_url": "<base>/acme/Renamed", "url": "<base>/api/v1/repos/acme/Renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/Renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/Renamed.git", "clone_url": "<base>/acme/Renamed.git", "original_url": "", "website": "", @@ -2340,7 +2340,7 @@ "html_url": "<base>/acme/renamed", "url": "<base>/api/v1/repos/acme/renamed", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/renamed.git", + "ssh_url": "ssh://<ssh-authority>/acme/renamed.git", "clone_url": "<base>/acme/renamed.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json index 4c8603ac..77f38d59 100644 --- a/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json +++ b/crates/forge/conformance/fixtures/1.26.2/N-default-branch.json @@ -56,7 +56,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -165,7 +165,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -271,7 +271,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -549,7 +549,7 @@ "html_url": "<base>/acme/dflt", "url": "<base>/api/v1/repos/acme/dflt", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/dflt.git", + "ssh_url": "ssh://<ssh-authority>/acme/dflt.git", "clone_url": "<base>/acme/dflt.git", "original_url": "", "website": "", @@ -664,7 +664,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -779,7 +779,7 @@ "html_url": "<base>/acme/fresh1", "url": "<base>/api/v1/repos/acme/fresh1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh1.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh1.git", "clone_url": "<base>/acme/fresh1.git", "original_url": "", "website": "", @@ -956,7 +956,7 @@ "html_url": "<base>/acme/fresh2", "url": "<base>/api/v1/repos/acme/fresh2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh2.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh2.git", "clone_url": "<base>/acme/fresh2.git", "original_url": "", "website": "", @@ -1071,7 +1071,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1186,7 +1186,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", @@ -1314,7 +1314,7 @@ "html_url": "<base>/acme/fresh3", "url": "<base>/api/v1/repos/acme/fresh3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/fresh3.git", + "ssh_url": "ssh://<ssh-authority>/acme/fresh3.git", "clone_url": "<base>/acme/fresh3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json index 98f697d5..bd079c31 100644 --- a/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json +++ b/crates/forge/conformance/fixtures/1.26.2/O-pr-head-lifecycle.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -394,7 +394,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -496,7 +496,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -669,7 +669,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -771,7 +771,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -844,6 +844,12 @@ "ok": true, "output": "<sha#3>\trefs/pull/1/head" }, + { + "kind": "note", + "key": "ls-remote-pull-refs_stdout", + "value": "<sha#3>\trefs/pull/1/head", + "strict": true + }, { "kind": "http", "method": "DELETE", @@ -962,7 +968,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1064,7 +1070,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1237,7 +1243,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1339,7 +1345,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1532,7 +1538,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1634,7 +1640,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -1706,6 +1712,63 @@ "ok": true, "output": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head" }, + { + "kind": "note", + "key": "ls-remote-pull-refs-after-delete_stdout", + "value": "<sha#3>\trefs/pull/1/head\n<sha#4>\trefs/pull/2/head", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/life.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#1> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n003b<sha#3> refs/heads/l1\n003d<sha#1> refs/heads/main\n003e<sha#3> refs/pull/1/head\n003e<sha#4> refs/pull/2/head\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "life_advertised_refs_upload_pack", + "value": [ + "HEAD", + "refs/heads/l1", + "refs/heads/main", + "refs/pull/1/head", + "refs/pull/2/head" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/life.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c2<sha#3> refs/heads/l1\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n003d<sha#1> refs/heads/main\n003e<sha#3> refs/pull/1/head\n003e<sha#4> refs/pull/2/head\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "life_advertised_refs_receive_pack", + "value": [ + "refs/heads/l1", + "refs/heads/main", + "refs/pull/1/head", + "refs/pull/2/head" + ], + "strict": true + }, { "kind": "http", "method": "GET", @@ -1927,7 +1990,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2029,7 +2092,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2218,7 +2281,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2320,7 +2383,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2497,13 +2560,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2599,13 +2662,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2776,13 +2839,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -2878,13 +2941,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3052,13 +3115,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3154,13 +3217,13 @@ "fork": false, "template": false, "mirror": false, - "size": 26, + "size": 25, "language": "", "languages_url": "<base>/api/v1/repos/acme/life/languages", "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3350,7 +3413,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3359,7 +3422,7 @@ "watchers_count": 1, "branch_count": 4, "open_issues_count": 0, - "open_pr_counter": 3, + "open_pr_counter": 2, "release_counter": 0, "default_branch": "main", "archived": false, @@ -3452,7 +3515,7 @@ "html_url": "<base>/acme/life", "url": "<base>/api/v1/repos/acme/life", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/life.git", + "ssh_url": "ssh://<ssh-authority>/acme/life.git", "clone_url": "<base>/acme/life.git", "original_url": "", "website": "", @@ -3461,7 +3524,7 @@ "watchers_count": 1, "branch_count": 4, "open_issues_count": 0, - "open_pr_counter": 3, + "open_pr_counter": 2, "release_counter": 0, "default_branch": "main", "archived": false, @@ -3527,9 +3590,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { + "errors": null, "message": "not found", - "url": "<base>/api/swagger", - "errors": null + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json index 185271dc..f11cf955 100644 --- a/crates/forge/conformance/fixtures/1.26.2/P-pagination.json +++ b/crates/forge/conformance/fixtures/1.26.2/P-pagination.json @@ -112,7 +112,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -214,7 +214,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -375,7 +375,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -477,7 +477,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -652,7 +652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -754,7 +754,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -915,7 +915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1017,7 +1017,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1192,7 +1192,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1294,7 +1294,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1469,7 +1469,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1571,7 +1571,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1732,7 +1732,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -1834,7 +1834,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2009,7 +2009,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2111,7 +2111,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2272,7 +2272,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2374,7 +2374,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2548,7 +2548,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2650,7 +2650,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2811,7 +2811,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -2913,7 +2913,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3074,7 +3074,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3176,7 +3176,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3337,7 +3337,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3439,7 +3439,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3600,7 +3600,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3702,7 +3702,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3882,7 +3882,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -3984,7 +3984,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4145,7 +4145,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4247,7 +4247,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4408,7 +4408,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4510,7 +4510,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4671,7 +4671,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4773,7 +4773,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -4934,7 +4934,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5036,7 +5036,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5216,7 +5216,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5318,7 +5318,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5479,7 +5479,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5581,7 +5581,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5742,7 +5742,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -5844,7 +5844,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6005,7 +6005,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6107,7 +6107,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6268,7 +6268,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6370,7 +6370,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6550,7 +6550,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6652,7 +6652,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6813,7 +6813,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -6915,7 +6915,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7076,7 +7076,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7178,7 +7178,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7339,7 +7339,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7441,7 +7441,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7602,7 +7602,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7704,7 +7704,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7884,7 +7884,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -7986,7 +7986,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8147,7 +8147,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8249,7 +8249,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8410,7 +8410,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8512,7 +8512,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8673,7 +8673,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8775,7 +8775,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -8936,7 +8936,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9038,7 +9038,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9218,7 +9218,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9320,7 +9320,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9481,7 +9481,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9583,7 +9583,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9744,7 +9744,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -9846,7 +9846,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10007,7 +10007,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10109,7 +10109,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10270,7 +10270,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10372,7 +10372,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10546,7 +10546,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10648,7 +10648,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10809,7 +10809,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -10911,7 +10911,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11072,7 +11072,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11174,7 +11174,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11335,7 +11335,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11437,7 +11437,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11598,7 +11598,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11700,7 +11700,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11874,7 +11874,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -11976,7 +11976,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12137,7 +12137,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12239,7 +12239,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12400,7 +12400,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12502,7 +12502,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12663,7 +12663,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12765,7 +12765,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -12926,7 +12926,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13028,7 +13028,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13202,7 +13202,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13304,7 +13304,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13465,7 +13465,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13567,7 +13567,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13728,7 +13728,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13830,7 +13830,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -13991,7 +13991,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14093,7 +14093,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14254,7 +14254,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -14356,7 +14356,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15331,7 +15331,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15518,7 +15518,7 @@ "html_url": "<base>/acme/pages", "url": "<base>/api/v1/repos/acme/pages", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pages.git", + "ssh_url": "ssh://<ssh-authority>/acme/pages.git", "clone_url": "<base>/acme/pages.git", "original_url": "", "website": "", @@ -15632,7 +15632,7 @@ "html_url": "<base>/acme/pgrepo1", "url": "<base>/api/v1/repos/acme/pgrepo1", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo1.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo1.git", "clone_url": "<base>/acme/pgrepo1.git", "original_url": "", "website": "", @@ -15728,7 +15728,7 @@ "html_url": "<base>/acme/pgrepo2", "url": "<base>/api/v1/repos/acme/pgrepo2", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo2.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo2.git", "clone_url": "<base>/acme/pgrepo2.git", "original_url": "", "website": "", @@ -15841,7 +15841,7 @@ "html_url": "<base>/acme/pgrepo3", "url": "<base>/api/v1/repos/acme/pgrepo3", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/pgrepo3.git", + "ssh_url": "ssh://<ssh-authority>/acme/pgrepo3.git", "clone_url": "<base>/acme/pgrepo3.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json index da4ab7d8..636a25ad 100644 --- a/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/R-token-scope-edges.json @@ -437,7 +437,7 @@ "html_url": "<base>/botorg/legit", "url": "<base>/api/v1/repos/botorg/legit", "link": "", - "ssh_url": "ssh://git@localhost:2222/botorg/legit.git", + "ssh_url": "ssh://<ssh-authority>/botorg/legit.git", "clone_url": "<base>/botorg/legit.git", "original_url": "", "website": "", @@ -540,9 +540,9 @@ "content-type": "application/json;charset=utf-8" }, "body": { - "url": "<base>/api/swagger", "errors": null, - "message": "not found" + "message": "not found", + "url": "<base>/api/swagger" } } ] diff --git a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json index 10f7e94c..34fb6a8f 100644 --- a/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json +++ b/crates/forge/conformance/fixtures/1.26.2/S-ref-pushes.json @@ -131,6 +131,76 @@ "ok": true, "output": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}" }, + { + "kind": "note", + "key": "ls-remote-all-refs_stdout", + "value": "<sha#3>\tHEAD\n<sha#1>\trefs/changes/1/2\n<sha#1>\trefs/custom/thing\n<sha#3>\trefs/heads/main\n<sha#1>\trefs/heads/pull/1/head\n<sha#2>\trefs/heads/r1\n<sha#1>\trefs/keep-around/<sha#1>\n<sha#1>\trefs/notes/commits\n<sha#2>\trefs/pull/1/head\n<sha#1>\trefs/replace/<sha#2>\n<sha#4>\trefs/tags/annot\n<sha#1>\trefs/tags/annot^{}", + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/refs.git/info/refs?service=git-upload-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-upload-pack-advertisement" + }, + "body_text": "001e# service=git-upload-pack\n0000014c<sha#3> HEAD\\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want no-done symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/2.52.0-Linux\n003e<sha#1> refs/changes/1/2\n003f<sha#1> refs/custom/thing\n003d<sha#3> refs/heads/main\n0044<sha#1> refs/heads/pull/1/head\n003b<sha#2> refs/heads/r1\n0067<sha#1> refs/keep-around/<sha#1>\n0040<sha#1> refs/notes/commits\n003e<sha#2> refs/pull/1/head\n0063<sha#1> refs/replace/<sha#2>\n003d<sha#4> refs/tags/annot\n0040<sha#1> refs/tags/annot^{}\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "refs_advertised_refs_upload_pack", + "value": [ + "HEAD", + "refs/changes/1/2", + "refs/custom/thing", + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/keep-around/<sha#1>", + "refs/notes/commits", + "refs/pull/1/head", + "refs/replace/<sha#2>", + "refs/tags/annot", + "refs/tags/annot^{}" + ], + "strict": true + }, + { + "kind": "http", + "method": "GET", + "path": "/acme/refs.git/info/refs?service=git-receive-pack", + "auth": "admin-tokbasic", + "status": 200, + "headers": { + "content-type": "application/x-git-receive-pack-advertisement" + }, + "body_text": "001f# service=git-receive-pack\n000000c5<sha#1> refs/changes/1/2\\0report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.52.0-Linux\n003f<sha#1> refs/custom/thing\n003d<sha#3> refs/heads/main\n0044<sha#1> refs/heads/pull/1/head\n003b<sha#2> refs/heads/r1\n0067<sha#1> refs/keep-around/<sha#1>\n0040<sha#1> refs/notes/commits\n003e<sha#2> refs/pull/1/head\n0063<sha#1> refs/replace/<sha#2>\n003d<sha#4> refs/tags/annot\n0000", + "volatile": [ + "$text" + ] + }, + { + "kind": "note", + "key": "refs_advertised_refs_receive_pack", + "value": [ + "refs/changes/1/2", + "refs/custom/thing", + "refs/heads/main", + "refs/heads/pull/1/head", + "refs/heads/r1", + "refs/keep-around/<sha#1>", + "refs/notes/commits", + "refs/pull/1/head", + "refs/replace/<sha#2>", + "refs/tags/annot" + ], + "strict": true + }, { "kind": "http", "method": "GET", @@ -367,7 +437,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<ssh-authority>/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", @@ -469,7 +539,7 @@ "html_url": "<base>/acme/refs", "url": "<base>/api/v1/repos/acme/refs", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/refs.git", + "ssh_url": "ssh://<ssh-authority>/acme/refs.git", "clone_url": "<base>/acme/refs.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json index e40f7ae3..93db444a 100644 --- a/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json +++ b/crates/forge/conformance/fixtures/1.26.2/T-merge-outcomes.json @@ -117,7 +117,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -219,7 +219,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -396,7 +396,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -498,7 +498,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -578,7 +578,7 @@ "headers": { "content-type": "application/json;charset=utf-8" }, - "body_text": "", + "body_text": "{\"Style\":\"merge\",\"StdOut\":\"\",\"StdErr\":\"fatal: refusing to merge unrelated histories\\n\"", "volatile": [ "$text" ] @@ -586,7 +586,7 @@ { "kind": "note", "key": "unrelated_merge_exact_body", - "value": "", + "value": "{\"Style\":\"merge\",\"StdOut\":\"\",\"StdErr\":\"fatal: refusing to merge unrelated histories\\n\"", "strict": false }, { @@ -698,7 +698,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -800,7 +800,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -982,7 +982,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1084,7 +1084,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1261,7 +1261,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1363,7 +1363,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1579,7 +1579,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1681,7 +1681,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1863,7 +1863,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -1965,7 +1965,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2142,7 +2142,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2244,7 +2244,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2441,7 +2441,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2543,7 +2543,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2720,7 +2720,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -2822,7 +2822,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3035,7 +3035,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3137,7 +3137,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3234,12 +3234,6 @@ "headers": {}, "body_text": "" }, - { - "kind": "note", - "key": "conflicting_pr_mergeable_after_8s", - "value": false, - "strict": false - }, { "kind": "http", "method": "GET", @@ -3349,7 +3343,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3451,7 +3445,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3514,7 +3508,10 @@ "closed_at": null, "pin_order": 0, "content_version": 0 - } + }, + "strict_keys": [ + "mergeable" + ] }, { "kind": "http", @@ -3645,7 +3642,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3747,7 +3744,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -3921,7 +3918,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", @@ -4023,7 +4020,7 @@ "html_url": "<base>/acme/outcomes", "url": "<base>/api/v1/repos/acme/outcomes", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/outcomes.git", + "ssh_url": "ssh://<ssh-authority>/acme/outcomes.git", "clone_url": "<base>/acme/outcomes.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json index c4f9dda5..f797e550 100644 --- a/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json +++ b/crates/forge/conformance/fixtures/1.26.2/U-status-check-edges.json @@ -305,7 +305,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<ssh-authority>/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", @@ -407,7 +407,7 @@ "html_url": "<base>/acme/checks", "url": "<base>/api/v1/repos/acme/checks", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/checks.git", + "ssh_url": "ssh://<ssh-authority>/acme/checks.git", "clone_url": "<base>/acme/checks.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json index 3380e626..c5f0cd6c 100644 --- a/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json +++ b/crates/forge/conformance/fixtures/1.26.2/X-auth-forms.json @@ -88,7 +88,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -278,7 +278,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -468,7 +468,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -658,7 +658,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -848,7 +848,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1038,7 +1038,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", @@ -1228,7 +1228,7 @@ "html_url": "<base>/acme/authrepo", "url": "<base>/api/v1/repos/acme/authrepo", "link": "", - "ssh_url": "ssh://git@localhost:2222/acme/authrepo.git", + "ssh_url": "ssh://<ssh-authority>/acme/authrepo.git", "clone_url": "<base>/acme/authrepo.git", "original_url": "", "website": "", diff --git a/crates/forge/conformance/run.py b/crates/forge/conformance/run.py index d9f528cd..188c2be5 100644 --- a/crates/forge/conformance/run.py +++ b/crates/forge/conformance/run.py @@ -131,6 +131,8 @@ def eq_str(exp, act, bij, d, shown): def is_volatile(key, dotted, parent, volatile): + if "!" + dotted in volatile: # a call that settled this key asks for a by-value comparison + return False if dotted in volatile or key in DEFAULT_VOLATILE: return True return key == "size" and isinstance(parent, dict) and "full_name" in parent @@ -186,6 +188,17 @@ def norm_msg(t): return re.sub(r"\s+", " ", t).strip(" .:\n") +def eq_val(ev, av, bij): + """Equality of note/pin values; strings are compared with placeholder identity (`<sha#2>`).""" + if isinstance(ev, str) and isinstance(av, str): + return eq_str(ev, av, bij, [], "") + if isinstance(ev, list) and isinstance(av, list): + return len(ev) == len(av) and all(eq_val(x, y, bij) for x, y in zip(ev, av)) + if isinstance(ev, dict) and isinstance(av, dict): + return ev.keys() == av.keys() and all(eq_val(ev[k], av[k], bij) for k in ev) + return ev == av + + def msg_equal(exp_text, act_text, bij): tmp = [] return eq_str(norm_msg(exp_text), norm_msg(act_text), bij, tmp, "") @@ -216,19 +229,39 @@ def refusal_lines(text): return out +def cmp_request(exp, act, bij): + """The request side of an HTTP exchange: the principal it authenticated as and the normalized JSON body.""" + d = [] + if exp.get("auth") != act.get("auth"): + d.append(("fail", f"request authenticated as {act.get('auth')!r}, the fixture says {exp.get('auth')!r}")) + er, ar = exp.get("request"), act.get("request") + if er is None and ar is None: + return d + if er is None or ar is None: + d.append(("fail", f"request body {er!r} expected, got {ar!r}")) + return d + sub = [] + cmp_json(er, ar, "", sub, set(), bij) + d += [("fail", "request body" + x[1]) for x in sub] + return d + + def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None, skip_headers=()): """Return [(level, text)] where level is 'fail' or 'warn'. Empty list means match.""" d = [] bij.new_exchange() if exp["kind"] != act["kind"]: return [("fail", f"kind {exp['kind']} expected, got {act['kind']}")] + if ("web" in exp.get("tags", [])) != ("web" in act.get("tags", [])): + return [("fail", f"web tag differs: fixture {exp.get('tags', [])}, scenario {act.get('tags', [])}")] + if act.get("skipped"): # a web-tagged exchange, not run without --include-web + return [] if exp["kind"] == "note": if exp["key"] != act["key"]: d.append(("fail", f"note {exp['key']} expected, got {act['key']}")) elif exp.get("strict", True): # strict=False notes are informational ev, av = exp["value"], act["value"] - same = eq_str(ev, av, bij, [], "") if isinstance(ev, str) and isinstance(av, str) else ev == av - if not same: + if not eq_val(ev, av, bij): d.append(("fail", f"note {exp['key']}: {ev!r} expected, got {av!r}")) return d if exp["kind"] == "git": @@ -244,6 +277,7 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None, skip_he else: if exp["method"] != act["method"] or not eq_str(exp["path"], act["path"], bij, [], ""): return [("fail", f"request {exp['method']} {exp['path']} expected, got {act['method']} {act['path']}")] + d += cmp_request(exp, act, bij) es = exp["status"] if status_override is None else status_override if es != act["status"]: d.append(("fail", f"status {es} expected, got {act['status']}: {msg_text(act)[:200]!r}")) @@ -277,7 +311,7 @@ def cmp_exchange(exp, act, bij, extra_volatile=(), status_override=None, skip_he d.append(("fail", f"header {h}: expected {v!r}, missing")) else: eq_str(v, got, bij, d, f"header {h}") - volatile = set(exp.get("volatile", [])) | set(extra_volatile) + volatile = set(exp.get("volatile", [])) | set(extra_volatile) | {"!" + k for k in exp.get("strict_keys", [])} if es >= 400 or act["status"] >= 400: volatile |= {"message", "errors"} # top-level error text: compared above (or by a departure) if "body" in exp: @@ -328,8 +362,11 @@ def dep_indexes(spec, expected): return [i for i, e in enumerate(expected) if e.get("name") == spec or e.get("key") == spec] -EXPECT_KEYS = {"status", "message_contains", "ok", "value", "fields", "ignore_fields", "ignore_body", - "ignore_headers", "skip"} +EXPECT_KEYS = { + "http": {"status", "message_contains", "fields", "ignore_fields", "ignore_headers", "ignore_body", "skip"}, + "git": {"ok", "message_contains", "skip"}, + "note": {"value", "skip"}, +} def ex_ident(ex): @@ -354,8 +391,11 @@ def load_departures(path, scenario_ids): if not isinstance(e, dict) or not e: errs.append(f"{where}: expect must be a non-empty object") continue - if set(e) - EXPECT_KEYS: - errs.append(f"{where}: unknown expect keys {sorted(set(e) - EXPECT_KEYS)}") + kind = d.get("kind") + allowed = EXPECT_KEYS.get(kind, set().union(*EXPECT_KEYS.values())) + if set(e) - allowed: + errs.append(f"{where}: expect key(s) {sorted(set(e) - allowed)} do not apply to a {kind} exchange " + f"(allowed: {sorted(allowed)})") if not d.get("reason"): errs.append(f"{where}: reason is required") if d.get("kind") not in ("http", "git", "note"): @@ -415,7 +455,7 @@ def apply_override(exp, act, ov, bij, match=None): if e.get("skip"): return [("honoured", f"skipped: {why}")] if act["kind"] == "note": - if "value" in e and act["value"] != e["value"]: + if "value" in e and not eq_val(e["value"], act["value"], bij): d.append(("fail", f"unexpected: note {act['key']} {e['value']!r} expected, got {act['value']!r}")) elif act["kind"] == "git": if "ok" in e and act["ok"] != e["ok"]: @@ -485,6 +525,8 @@ def __init__(self, base, admin_token, mode): self.base_ready = False self.first_read = None self.strict_first_read = False + self.include_web = False + self.web_skipped = 0 r = self.call("GET", "/user", rec=False) if r.status != 200 or not r.json: raise SystemExit(f"admin token rejected by {self.base}: {r.status} {r.text[:200]}") @@ -519,6 +561,10 @@ def ns(self, s): s = re.sub(r"[0-9a-f]{40}(?= (?:HEAD|refs/|capabilities))", lambda m: self.sha_ph(m.group(0)), s) s = SHA_RE.sub(lambda m: self.sha_ph(m.group(0)), s) s = SHORT_RE.sub("<short>..<short>", s) + # the SSH authority is derived from the server's own SSH config (ssh://git@localhost:2222/x.git or + # git@host:x.git); keep the repo path, drop the host, so a server without SSH compares equal + s = re.sub(r"ssh://[^/\s\"']+/", "ssh://<ssh-authority>/", s) + s = re.sub(r"(?<![\w/@.-])[\w.-]+@[\w.-]+:(?=[\w.-]+/[\w.-]+\.git\b)", "<ssh-authority>:", s) # database counters inside URL fragments (`#issuecomment-7`) depend on everything created before s = re.sub(r"#(issuecomment|issue|event)-(\d+)", lambda m: f"#{m.group(1)}-" + self.id_ph("fragment:" + m.group(1), int(m.group(2))), s) return RFC_RE.sub("<ts>", TS_RE.sub("<ts>", s)) @@ -583,8 +629,14 @@ def new_password(self): # -- HTTP def call(self, method, path, json=None, as_="admin", expect=None, must_contain=None, volatile=None, headers=None, data=None, api=True, binary=False, rec=True, track=(), - retry_while=None, retry_s=90, no_retry=False, settle_keys=None, tags=()): + retry_while=None, retry_s=90, no_retry=False, settle_keys=None, tags=(), strict_keys=()): full = ("/api/v1" + path) if api else path + if "web" in tags and self.mode == "check" and not self.include_web and rec: + # Gitea web UI route (sc-forge has no web UI): keep the slot so exchange indexes stay aligned + self.web_skipped += 1 + self.push_ex({"kind": "http", "method": method, "path": self.np(full), "auth": as_, "status": 0, + "headers": {}, "tags": list(tags), "skipped": True}) + return R(0, {}, b"") hdrs = {"Accept": "application/json", "User-Agent": "sc-forge-conformance"} p = self.principals[as_] if p: @@ -660,6 +712,8 @@ def get(b, k): ex[k] = list(v) if tags: ex["tags"] = list(tags) + if strict_keys: # keys of DEFAULT_VOLATILE that this (settled) exchange asserts by value + ex["strict_keys"] = list(strict_keys) if unsettled: ex["unsettled"] = True if first_differs: @@ -865,7 +919,7 @@ def run_all(c, only, out=None, fixtures=None, departures=()): c.ex, c.cursor, c.diffs = [], 0, [] c.reset_scenario() c.expected, skip, stale = [], None, [] - c.overrides = {} + c.overrides, c.web_skipped = {}, 0 if c.mode == "check" and selected: fp = os.path.join(fixtures, fname) if not os.path.exists(fp): @@ -918,33 +972,35 @@ def run_all(c, only, out=None, fixtures=None, departures=()): f.write("\n") summary.append((sid, slug, "ERROR" if err else "ok", [err] if err else [], len(c.ex), dt)) continue - lines, failed = [], False + lines, nfail = [], 0 for i, label, ds in c.diffs: bad = [x for x in ds if x[0] == "fail"] hon = [x for x in ds if x[0] == "honoured"] - failed |= bool(bad) + nfail += bool(bad) if bad or hon or ds or c.verbose: tag = "FAIL" if bad else ("ok* " if hon else ("warn" if ds else "ok ")) lines.append(f" {tag} #{i:02d} {label}") lines += [f" {'expected difference honoured' if lv == 'honoured' else lv}: {t}" for lv, t in ds] + # unpaired exchanges and errors: each counts as a failed exchange + missing = len(c.expected) - len(c.ex) if err: if skip and norm_msg(skip) == norm_msg(err): lines.append(f" (fixture recorded the same error: {skip[:200]})") else: - failed = True - lines.append(f" ERROR {err}") + nfail += 1 + lines.append(f" ERROR {err}" + ("" if skip else " (the fixture recorded no error)")) if skip: lines.append(f" fixture recorded a different error: {skip[:300]}") elif skip: - failed = True + nfail += 1 lines.append(f" FAIL fixture recorded an error but the scenario completed: {skip[:300]}") - elif len(c.ex) < len(c.expected): - failed = True - lines.append(f" FAIL {len(c.expected) - len(c.ex)} recorded exchange(s) not produced") + if missing > 0: + nfail += missing + lines.append(f" FAIL {missing} recorded exchange(s) not produced (fixture has {len(c.expected)}, run made {len(c.ex)})") if stale: - failed = True + nfail += len(stale) lines += [" FAIL " + x for x in stale] - summary.append((sid, slug, "FAIL" if failed else "ok", lines, len(c.ex), dt)) + summary.append((sid, slug, "FAIL" if nfail else "ok", lines, len(c.ex), dt, nfail, c.web_skipped)) return summary @@ -957,6 +1013,7 @@ def cmd_run(a): deps = load_departures(a.departures, ids) if getattr(a, "departures", None) else [] c = Ctx(a.base_url, a.admin_token, a.cmd) c.strict_first_read = getattr(a, "strict_first_read", False) + c.include_web = getattr(a, "include_web", False) c.verbose = a.verbose t0 = time.time() leaks = [] @@ -984,7 +1041,12 @@ def cmd_run(a): bad += st in ("FAIL", "ERROR") for h in leaks: print(f"LEAK {h}") - print(f"\n{len(summary) - bad}/{len(summary)} scenarios ok in {time.time() - t0:.0f}s" + (f"; {len(leaks)} credential-shaped value(s) in the fixtures" if leaks else "")) + nfail = sum(s[6] for s in summary if len(s) > 6) + web = sum(s[7] for s in summary if len(s) > 7) + print(f"\n{len(summary) - bad}/{len(summary)} scenarios ok in {time.time() - t0:.0f}s" + + (f"; {nfail} failed exchange(s)" if a.cmd == "check" else "") + + (f"; {web} web exchange(s) skipped (check --include-web runs them)" if web else "") + + (f"; {len(leaks)} credential-shaped value(s) in the fixtures" if leaks else "")) return 1 if bad or leaks else 0 @@ -1062,6 +1124,8 @@ def main(): else: p.add_argument("--fixtures", required=True) p.add_argument("--departures", help="JSON list of reviewed differences from the recorded behaviour") + p.add_argument("--include-web", action="store_true", + help="also run the exchanges tagged `web` (Gitea web UI routes); skipped by default") p.add_argument("--strict-first-read", action="store_true", help="fail when the first read of an async repo field differs from the settled value") p = sub.add_parser("diff") @@ -1358,6 +1422,32 @@ def parents(c, repo, sha): return len(c.git(["rev-list", "--parents", "-n1", sha], cwd=p, rec=False)[1].split()) - 1 +def advert_refs(data): + """Ref names advertised in a smart-HTTP info/refs body (pkt-lines `<sha> <ref>[\\0caps]`).""" + refs, i = [], 0 + while i + 4 <= len(data): + try: + n = int(data[i:i + 4], 16) + except ValueError: + break + if n < 4: + i += 4 + continue + payload, i = data[i + 4:i + n], i + n + line = payload.split(b"\0", 1)[0].decode("latin-1").strip() + m = re.match(r"^[0-9a-f]{40} (.+)$", line) + if m: + refs.append(m.group(1)) + return refs + + +def advert_probe(c, repo, label): + """Record which refs each service advertises (sc-forge hides everything but heads and tags).""" + for svc, key in (("git-upload-pack", "upload_pack"), ("git-receive-pack", "receive_pack")): + r = c.call("GET", f"/acme/{repo}.git/info/refs?service={svc}", as_="admin-tokbasic", api=False, volatile=["$text"]) + c.note(f"{label}_advertised_refs_{key}", [c.ns(x) for x in advert_refs(r.data)]) + + def repo_state(c, path, label): """GET a repo whose `empty`/`default_branch` may lag a push: record the settled value, keep the race as a note.""" r = c.call("GET", path, settle_keys=["empty", "default_branch"]) @@ -1502,8 +1592,10 @@ def settle_merged(n, label): nc, _ = mkpr(c, "merges", "cf2", {"conflict.txt": "two\n"}) merge(na, {"Do": "merge"}) time.sleep(8) - c.note("conflicting_pr_mergeable_after_8s", get_pr(c, "merges", nc)["mergeable"], strict=False) - c.call("GET", R + f"/pulls/{nc}", as_=A) + # settled conflict state: poll until 8 equal reads, then `mergeable` is compared by value (false) + cf = c.call("GET", R + f"/pulls/{nc}", as_=A, settle_keys=["mergeable"], strict_keys=["mergeable"]) + if c.mode == "record" and cf.json.get("mergeable") is not False: + raise SetupError(f"the conflicting PR settled as mergeable={cf.json.get('mergeable')!r}") merge(nc, {"Do": "merge"}, no_retry=True) c.call("PATCH", R + f"/pulls/{nc}", {"state": "closed"}, as_=A, rec=False) # 6. closed PR @@ -1742,7 +1834,7 @@ def sc_visibility(c): volatile=["$text"]) for who in ("none", "dave"): for repo in ("vis", "ghost"): - c.call("GET", f"/acme/{repo}", as_=tokbasic(c, who), api=False, volatile=["$text"]) + c.call("GET", f"/acme/{repo}", as_=tokbasic(c, who), api=False, volatile=["$text"], tags=["web"]) # Gitea web UI c.git(["ls-remote", c.git_url(repo, who)] if who != "none" else ["ls-remote", c.git_url(repo, "admin", user="", secret="")], name=f"ls-remote-{repo}-{who}") for who in ("none", "dave", "carol", "admin"): @@ -1855,7 +1947,7 @@ def sc_pr_lifecycle(c): c.note("force_push_head_sha_follows", bool(ok)) c.call("GET", R + f"/pulls/{n1}", as_=A) c.call("GET", R + "/pulls?state=open&limit=50", as_=A) - c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs", cwd=wcp) + c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs", cwd=wcp, note_stdout=True) # 2. delete the head branch while the PR is open n2, s2 = mkpr(c, "life", "l2", {"l2.txt": "2\n"}) c.call("DELETE", R + "/branches/l2") @@ -1864,7 +1956,8 @@ def sc_pr_lifecycle(c): c.call("GET", R + "/pulls?state=open&limit=50", as_=A) c.call("POST", R + f"/pulls/{n2}/merge", {"Do": "merge"}, as_=A) c.call("GET", R + f"/pulls/{n2}", as_=A) - c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs-after-delete", cwd=wcp) + c.git(["ls-remote", url, "refs/pull/*"], name="ls-remote-pull-refs-after-delete", cwd=wcp, note_stdout=True) + advert_probe(c, "life", "life") c.call("GET", R + f"/pulls/{n2}/commits", as_=A) c.call("GET", R + f"/pulls/{n2}.diff", as_=A) # 3. merge, then recreate the head branch at a new commit @@ -2031,7 +2124,8 @@ def sc_refs(c): for name, spec in tests: c.git(["push", "origin", spec], cwd=p, name="bot-push-" + name) c.git(["push", c.git_url("refs", "carol"), f"{h}:refs/tags/v-carol"], cwd=p, name="read-collab-push-tag") - c.git(["ls-remote", c.git_url("refs", "admin")], name="ls-remote-all-refs") + c.git(["ls-remote", c.git_url("refs", "admin")], name="ls-remote-all-refs", note_stdout=True) + advert_probe(c, "refs", "refs") c.call("GET", R + "/git/refs", as_="bot-scoped") c.call("GET", R + "/tags", as_="bot-scoped") c.call("GET", R + f"/pulls/{n1}", as_="bot-scoped", volatile=["mergeable"]) @@ -2082,8 +2176,9 @@ def try_pr(title, head, raw_note=None): nb, _ = mkpr(c, "outcomes", "cfb", {"cf.txt": "b\n"}) c.call("POST", R + f"/pulls/{na}/merge", {"Do": "merge"}, as_=A) time.sleep(8) - c.note("conflicting_pr_mergeable_after_8s", get_pr(c, "outcomes", nb)["mergeable"], strict=False) - c.call("GET", R + f"/pulls/{nb}", as_=A) + cf = c.call("GET", R + f"/pulls/{nb}", as_=A, settle_keys=["mergeable"], strict_keys=["mergeable"]) + if c.mode == "record" and cf.json.get("mergeable") is not False: + raise SetupError(f"the conflicting PR settled as mergeable={cf.json.get('mergeable')!r}") c.call("POST", R + f"/pulls/{nb}/merge", {"Do": "merge"}, as_=A, no_retry=True) c.call("PATCH", R + f"/pulls/{nb}", {"state": "closed"}, as_=A) c.call("GET", R + f"/pulls/{nb}", as_=A) From 7e6cf84622c3f43fbe5bc0a5e5085fe3335e3a00 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:16:55 +0300 Subject: [PATCH 20/23] docs(forge): record ref advertisement and web probe findings --- crates/forge/conformance/FINDINGS.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crates/forge/conformance/FINDINGS.md b/crates/forge/conformance/FINDINGS.md index febb8ddd..03c952e9 100644 --- a/crates/forge/conformance/FINDINGS.md +++ b/crates/forge/conformance/FINDINGS.md @@ -192,3 +192,13 @@ Scenarios W (protected contents) and X (auth forms, token minting), plus additio - **Harness notes:** `--only` reruns can differ from the full ordered run because later scenarios read state from earlier ones (scenario B makes `alice` private); the full run is the reference. Cross-version `check` now fails about 310 exchanges because error text is compared. + +## Ref advertisement and web probes (round 6) + +- Real Gitea advertises `refs/pull/*` on both `git-upload-pack` and `git-receive-pack`. In scenario S + it also advertises `refs/changes`, `refs/custom`, `refs/keep-around`, `refs/notes` and `refs/replace`, + which a write collaborator can push. `sc-forge` advertises only `HEAD`, `refs/heads/*` and + `refs/tags/*` (departures pin the filtered list). +- Four exchanges in scenario K are Gitea web-UI routes (`GET /acme/{vis,ghost}` as anonymous and as a + user). They are tagged `web` and skipped by default; `check --include-web` runs them for comparison + against real Gitea. From e31d8c9958b7f39f28fc0cf3d89f42598ac29f38 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:27:57 +0300 Subject: [PATCH 21/23] docs(forge): allowAnySHA1InWant (recorded deleted-branch fetch; tested), same exposure as protocol v2 --- .../specs/2026-10-22-p38-forge-design.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 8ad0ffe9..dd8169b5 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -102,13 +102,15 @@ recorded fixtures, not here. - Combined status lists only the latest status per context; clients do not deduplicate. `X-Total-Count` equals the listed count. - `GET /commits` on an empty repo answers 409. -- Git needs reachable-SHA fetch (tested with git 2.54, protocol v0: a commit - reachable only through a hidden `refs/forge/pull/*` ref is still fetchable with - `uploadpack.allowReachableSHA1InWant`, so `allowAnySHA1InWant` is not needed; - a commit no ref reaches is refused. Protocol v2 does not enforce reachability at - all, so any object whose id a reader knows is fetchable over v2, and the threat - model treats "deleted but not yet gc'd" objects as readable by anyone with read - access to the repo), `blob:none` filters, shallow fetch, +- Git needs fetch by SHA, including the tip of a deleted branch (recorded for + protocol v0 and v2). Tested with git 2.54: over v0, `allowReachableSHA1InWant` + serves a commit reachable only through a hidden `refs/forge/pull/*` ref but + refuses a commit no ref reaches, which the recorded scenario fetches; so + `sc-forge` sets `uploadpack.allowAnySHA1InWant=true`. This adds no exposure + over protocol v2, which does not enforce reachability at all: any object whose + id a reader knows is already fetchable over v2. The threat model therefore + treats "deleted but not yet gc'd" objects as readable by anyone with read + access to the repo. Also needed: `blob:none` filters, shallow fetch, `Git-Protocol: version=2`, and `push --force-with-lease=refs/heads/b:`. - Bootstrap scripts shell into the container for `admin user create --admin --must-change-password=false`, `admin user change-password`, and @@ -260,7 +262,7 @@ line (`Status:` and headers), then the body is streamed. `GIT_TERMINAL_PROMPT=0`, and per-spawn config through `GIT_CONFIG_COUNT`: `core.hooksPath=<data>/hooks` (on **every** spawn, including `update-ref`, which runs `reference-transaction`), `uploadpack.allowFilter=true`, - `uploadpack.allowReachableSHA1InWant=true`, `uploadpackfilter.allow=false` with + `uploadpack.allowAnySHA1InWant=true`, `uploadpackfilter.allow=false` with an explicit allow for `blob:none` only, `receive.fsckObjects=true`, `receive.maxInputSize`, `receive.autogc=false`, `gc.auto=0`, `core.useReplaceRefs=false`, and durability (`core.fsync=all`, From b7f11489ddee7984f58d7caff4276851b49e152e Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:30:17 +0300 Subject: [PATCH 22/23] docs(forge): status empty-answer rule, repo vs owner name rules, exact version string; departures for empty/unknown combined status --- crates/forge/conformance/departures.json | 57 +++++++++++++++++++ .../specs/2026-10-22-p38-forge-design.md | 32 +++++++---- 2 files changed, 78 insertions(+), 11 deletions(-) diff --git a/crates/forge/conformance/departures.json b/crates/forge/conformance/departures.json index 4a0794c1..0efd5620 100644 --- a/crates/forge/conformance/departures.json +++ b/crates/forge/conformance/departures.json @@ -1245,5 +1245,62 @@ "ignore_body": true }, "reason": "sc-forge never tries a Basic password on an ordinary API route (only /users/{u}/tokens* accept one); 'auth' is a placeholder for its 401 text [ignore_body: the recorded 200 body has another shape than the departed answer]" + }, + { + "scenario": "H", + "exchange": 0, + "kind": "http", + "match": "GET /api/v1/repos/acme/status/commits/<sha#1>/status?limit=50", + "expect": { + "ignore_fields": [ + "state", + "sha" + ], + "fields": { + "state": "pending" + }, + "ignore_headers": [ + "link", + "x-total-count" + ] + }, + "reason": "existing commit with no statuses: sc-forge answers state pending with the real sha (1.26.2); 1.22.6's state '' and sha '' is an empty answer, so the version rule picks 1.26.2" + }, + { + "scenario": "H", + "exchange": 48, + "kind": "http", + "match": "GET /api/v1/repos/acme/status/commits/<sha#5>/status?limit=50", + "expect": { + "status": 404, + "ignore_body": true, + "message_contains": [ + "not found" + ], + "ignore_headers": [ + "link", + "x-total-count" + ] + }, + "reason": "combined status of an unknown sha: 404 (1.26.2); 1.22.6's 200 with empty fields is an empty answer, so the version rule picks 1.26.2. 'not found' is a placeholder word for sc-forge's text" + }, + { + "scenario": "H", + "exchange": 49, + "kind": "http", + "match": "GET /api/v1/repos/acme/status/commits/main/status?limit=50", + "expect": { + "status": 200, + "ignore_body": true, + "fields": { + "state": "pending", + "total_count": 0 + }, + "ignore_headers": [ + "link", + "x-total-count" + ] + }, + "reason": "the only status on this commit was the refused bogus state: no statuses, combined state pending; ignore_body: the recorded body lists that status" } ] \ No newline at end of file diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index dd8169b5..800d834b 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -436,9 +436,12 @@ facts: the POST response key is `status`; the combined endpoint lists only the latest per context (success plus failure is `failure`, success plus pending is `pending`); the history endpoints list everything. **Departures:** unknown state strings answer 422 (Gitea stores any string); a status POST to an unknown sha -answers 404 (both versions answer 500: an internal error is not a contract); the -combined status of an unknown sha is `200` with empty fields (1.22.6; 1.26.2 -answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. +answers 404 (both versions answer 500: an internal error is not a contract). By +the version rule (1.22.6's `state: ""` and `sha: ""` on an existing commit with no +statuses, and its `200` with empty fields for an unknown sha, are empty +answers), the combined status of an existing commit with no statuses is +`state: "pending"` with the real `sha` (1.26.2), and the combined status of an +unknown sha is 404 (1.26.2). Each has an entry in `departures.json`. ### Repository lifecycle @@ -464,10 +467,16 @@ answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. are addressed by immutable id. - **Default branch:** PATCH updates the row and bare `HEAD` together; the reconciler repairs a mismatch. A repo is `empty` when `HEAD` does not resolve - (computed live). Names: lower-case uniqueness enforced by a database index; - reserved names (`api`, `admin`, `assets`, `user`, `login`, and the rest of - Gitea's list), leading `-` or `.`, a trailing `.git`, and anything outside - `[A-Za-z0-9._-]` are rejected. + (computed live). **Repository names** follow the recorded Gitea rules: pattern + `[A-Za-z0-9._-]`, at most 100 characters, case-insensitive uniqueness per owner + (a database index on the lower-cased name), `.` and `..` reserved, and the + suffixes `.git`, `.wiki`, `.rss` and `.atom` rejected; a leading `.` or `-`, + `a..b`, and names such as `api`, `admin`, `user` and `assets` are **accepted** + (recorded 201 on 1.22.6), which is safe because repositories live on disk under + their immutable id, never under their name. **User and organization names** + share the URL namespace with `/api/...` and the other top-level routes, so they + additionally reject a reserved list (the union of both versions' lists plus + `api`, `admin`, `assets`, `user`, `login`). ### HTTP surface rules @@ -478,8 +487,10 @@ answers 404); a repo with no statuses answers `state: ""` as 1.22.6 does. not paginate do not paginate here. - Limits: JSON body cap, header cap, idle timeout, global connection cap, git request caps (inflated size included). -- `GET /api/v1/version` answers a Gitea-compatible version plus a `sc-forge` - suffix; clients use the route as a health probe. +- `GET /api/v1/version` answers exactly the recorded Gitea version + (`{"version":"1.22.6"}`), because clients may sniff it and the fixture compares + it by value; the server's identity is in a `Server: sc-forge/<version>` response + header instead. ### CLI @@ -626,7 +637,6 @@ header. Decisions drawn from it, beyond those stated in the sections above: fixture applies unchanged. 2. TLS: all known deployments terminate at a proxy or private network. Add `tlsio` only if one needs it (it needs a sync-to-hyper adapter). -3. Which Gitea version string `/version` reports; whether `has_actions` PATCH is - accepted and ignored or refused. +3. Whether `has_actions` PATCH is accepted and ignored or refused. 4. Signed ref attestation (the THREAT-MODEL's deferred gittuf-shaped item) is out of scope; v1 documents the rollback gap. From f57cbc408b4822e679496520009d993f9fa9a0b4 Mon Sep 17 00:00:00 2001 From: Toni Bergholm <toni.bergholm@codento.com> Date: Thu, 22 Oct 2026 18:30:30 +0300 Subject: [PATCH 23/23] docs(forge): reserved names apply to owners only --- docs/superpowers/specs/2026-10-22-p38-forge-design.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/superpowers/specs/2026-10-22-p38-forge-design.md b/docs/superpowers/specs/2026-10-22-p38-forge-design.md index 800d834b..f614ca3e 100644 --- a/docs/superpowers/specs/2026-10-22-p38-forge-design.md +++ b/docs/superpowers/specs/2026-10-22-p38-forge-design.md @@ -603,8 +603,9 @@ header. Decisions drawn from it, beyond those stated in the sections above: default branch leaves `empty: true` (computed from `HEAD`). - **Names.** Duplicate repo names are case-insensitive (409). Rename answers 422 (departure; Gitea redirects). `PATCH default_branch` naming a missing branch - answers 422 (Gitea silently keeps the old one). Reserved names are the union of - both versions' lists plus `api`. + answers 422 (Gitea silently keeps the old one). Reserved-name lists apply to user + and organization names only (union of both versions' lists plus `api`); repo + names follow the "Repository lifecycle" rules above. - **Messages to reproduce** (clients match on them): repo duplicate 409 `The repository with the same name already exists.`; user and org duplicate 422 `user already exists [name: x]`; stale head 409 `head out of date`; protection