AtlatestRepositorysigil-forgejo

sigil-forgejo / tree / src / forgejopulls.sgl

1;;; (forgejo pulls) - Forgejo pull request API.
2;;;
3;;; List, get, create, and merge pull requests.
4
5(define-library (forgejo pulls)
6 (import (sigil core)
7 (sigil string)
8 (forgejo client))
9
10 (export forgejo-list-pulls
11 forgejo-get-pull
12 forgejo-create-pull
13 forgejo-merge-pull
14 forgejo-pull-is-fork?)
16 (begin
18 ;;; List pull requests for a repository.
19 (define (forgejo-list-pulls base-url token owner repo)
20 (forgejo-get/json token
21 (forgejo-api-url base-url "repos" owner repo "pulls")))
23 ;;; Get a single pull request by number.
24 (define (forgejo-get-pull base-url token owner repo number)
25 (forgejo-get/json token
26 (forgejo-api-url base-url "repos" owner repo "pulls"
27 (number->string number))))
29 ;;; Create a new pull request.
30 (define (forgejo-create-pull base-url token owner repo title body
31 head base)
32 (forgejo-post/json token
33 (forgejo-api-url base-url "repos" owner repo "pulls")
34 #{ title: title
35 body: body
36 head: head
37 base: base }))
39 ;;; Merge a pull request.
40 (define (forgejo-merge-pull base-url token owner repo number)
41 (forgejo-post/json token
42 (forgejo-api-url base-url "repos" owner repo "pulls"
43 (number->string number) "merge")
44 #{ Do: "merge" }))
46 ;;; Check if a pull request is from a fork.
47 (define (forgejo-pull-is-fork? pr-data)
48 (let* ((head (dict-ref pr-data head: #f))
49 (repo (and head (dict-ref head repo: #f))))
50 (if repo
51 (eq? #t (dict-ref repo fork: #f))
52 #f)))
54 ))