const REPO = "https://codeberg.org/api/v1/repos/wldmr/rsticle"
# Get package version from Cargo.toml
export def package-version [] {
let root = (cargo locate-project --workspace) | from json | get root
open $root | get workspace.package.version
}
export def git-tags [] {
git tag | lines
}
export module codeberg {
export def --env login [token?] {
$env.CODEBERG_ACCESS_TOKEN = if ($token | is-not-empty) { $token } else { input "Codeberg Access Token: " }
}
def auth-header [] {
if ($env.CODEBERG_ACCESS_TOKEN? | is-empty) {
error make {msg: "Must set CODEBERG_ACCESS_TOKEN environment variable (or use `codeberg login`)"}
}
{Authorization: $"token ($env.CODEBERG_ACCESS_TOKEN)"}
}
export def release [tag:string@git-tags] {
http get $"($REPO)/releases/tags/($tag)"
}
export def "release new" [
# Name of the tag/release
tag:string@git-tags
# Path to the the release notes file.
#
# Will become the body text of the release
release_notes:path
] {
http post $"($REPO)/releases" -t application/json --headers (auth-header) {
tag_name: $tag,
body: (open $release_notes),
}
}
export def "release delete" [tag:string@git-tags] {
http delete $"($REPO)/releases/tags/($tag)" -H (auth-header)
}
export def "release upload" [
# Name of the tag/release
tag:string@git-tags
# The files to upload
files:list
] {
let release_id = release $tag | get id
let ASSETS = $"($REPO)/releases/($release_id)/assets";
$files | each { |file|
http post $ASSETS -t multipart/form-data -H (auth-header) {
name: ($file | path basename),
attachment: (open --raw $file | into binary)
};
}
}
}