AtlatestRepositorysigil-forgejo
sigil-forgejo / tree / src / forgejoreleases.sgl
1
;;; (forgejo releases) - Forgejo release management API.2
;;;3
;;; List, create, and manage releases and their assets.5
(define-library (forgejo releases)6
(import (sigil core)7
(sigil dict)8
(sigil string)9
(sigil json)10
(sigil fs)11
(sigil http client)12
(forgejo client))14
(export forgejo-list-releases15
forgejo-get-latest-release16
forgejo-create-release17
forgejo-upload-asset)19
(begin21
;;; List releases for a repository.22
(define (forgejo-list-releases base-url token owner repo)23
(forgejo-get/json token24
(forgejo-api-url base-url "repos" owner repo "releases")))26
;;; Get the latest release for a repository.27
(define (forgejo-get-latest-release base-url token owner repo)28
(forgejo-get/json token29
(string-append (forgejo-api-url base-url "repos" owner repo "releases")30
"?limit=1")))32
;;; Create a release on a repository.33
(define (forgejo-create-release base-url token owner repo tag-name34
name body)35
(forgejo-post/json token36
(forgejo-api-url base-url "repos" owner repo "releases")37
#{ tag_name: tag-name38
name: name39
body: body }))41
;;; Upload an asset to a release.42
;;;43
;;; release-id: the numeric ID of the release44
;;; file-path: local path to the file to upload45
;;; asset-name: the name the asset should have in the release46
(define (forgejo-upload-asset base-url token owner repo47
release-id file-path asset-name)48
(let* ((url (string-append49
(forgejo-api-url base-url "repos" owner repo50
"releases" (number->string release-id)51
"assets")52
"?name=" asset-name))53
(data (read-file-bytes file-path)))54
(http-post url data55
headers: (dict-merge56
(forgejo-auth-headers token)57
#{ content-type: "application/octet-stream" }))))59
))