type Blob implements GitObject { oid: String! isBinary: Boolean! text: String byteSize: Int! } interface GitObject { oid: String! } type Organization implements RepositoryOwner & UniformResourceLocatable { id: ID! """ The org's full path — just its slug for a top-level org, like GitHub; `parent/child` for a sub-org. """ login: String! resourcePath: String! repositories(first: Int): RepositoryConnection! """ nugitea extension: the org this one is nested under, if any. """ parentOrganization: Organization """ nugitea extension: orgs nested directly under this one. """ subOrganizations(first: Int): OrganizationConnection! } type OrganizationConnection { nodes: [Organization!]! totalCount: Int! } type Query { repository(owner: String!, name: String!): Repository repositoryOwner(login: String!): RepositoryOwner user(login: String!): User organization(login: String!): Organization """ Resolves a URL or path to the user, org, or repo it names. Walks owner segments until one names a repo, then stops — so trailing segments (`/tree/main/src`) still resolve to the repo, and the caller can compare `resourcePath` to see what's left over. Unambiguous because a sub-org and a repo can't share a name within the same parent. """ resource(url: String!): UniformResourceLocatable """ Every repo, across all owners (nugitea extension). """ repositories(first: Int): RepositoryConnection! } type Ref { name: String! } type Repository implements UniformResourceLocatable { id: ID! name: String! nameWithOwner: String! owner: RepositoryOwner! resourcePath: String! visibility: RepositoryVisibility! isPrivate: Boolean! """ `main` if it exists, else `master`, else whichever branch sorts first, else `null` — since HEAD in a freshly created bare repo doesn't reliably reflect what was actually pushed. """ defaultBranchRef: Ref refs: [Ref!]! """ Full recursive file list for the search feature — see the module doc comment for why this isn't literal GitHub API shape. """ files(ref: String!): [String!]! """ Resolves a `"ref"` or `"ref:path"` expression to a `Tree` or `Blob`. Tried as a tree first (a no-op-cheap `git ls-tree`); if that fails on a non-empty path, it's tried as a blob instead — a path can't be both, so git itself is the source of truth on which one an expression resolves to, rather than nugitea guessing from the shape of the path string. """ object(expression: String!): GitObject } type RepositoryConnection { nodes: [Repository!]! totalCount: Int! } interface RepositoryOwner { id: ID! login: String! resourcePath: String! repositories(first: Int): RepositoryConnection! } enum RepositoryVisibility { PUBLIC INTERNAL PRIVATE } type Tree implements GitObject { oid: String! entries: [TreeEntry!]! } type TreeEntry { name: String! type: String! oid: String! } interface UniformResourceLocatable { resourcePath: String! } type User implements RepositoryOwner & UniformResourceLocatable { id: ID! login: String! resourcePath: String! repositories(first: Int): RepositoryConnection! } """ Directs the executor to include this field or fragment only when the `if` argument is true. """ directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT """ Directs the executor to skip this field or fragment when the `if` argument is true. """ directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT schema { query: Query }