File: create-github-release

package info (click to toggle)
augur 24.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 25,316 kB
  • sloc: python: 14,253; sh: 232; makefile: 34
file content (63 lines) | stat: -rwxr-xr-x 1,530 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
set -euo pipefail
shopt -s extglob

devel="$(dirname "$0")"

main() {
    local version="${1:?version is required}"
    local commit pre_release
    shift
    local -a assets=("$@")

    if [[ ${#assets[@]} -eq 0 ]]; then
        echo "ERROR: no assets provided" >&2
        exit 1
    fi

    # Asserts that $version is an actual tag, not a branch name or other ref.
    git rev-parse --verify "$version^{tag}" >/dev/null

    # Translate from tag into commit for `gh release create --target`.
    commit="$(git rev-parse --verify "$version^{commit}")"

    if is-pre-release "$version"; then
        pre_release=1
    fi

    gh release create \
        "$version" \
        --repo "${GITHUB_REPOSITORY:-nextstrain/augur}" \
        --title "$version" \
        --target "$commit" \
        ${pre_release:+--prerelease} \
        --notes-file <(preamble; "$devel"/changes "$version") \
        "${assets[@]}"
}

is-pre-release() {
    # See https://peps.python.org/pep-0440/
    local version="$1"
    case "$version" in
        *@(a|b|rc|c)+([0-9])*)  # alpha, beta, release candidate (PEP 440 pre-releases)
            return 0;;
        *.dev+([0-9])*)         # dev release
            return 0;;
        *+*)                    # local version
            return 0;;
        *)
            return 1;;
    esac
}

preamble() {
    cat <<~~

_These release notes are automatically extracted from the full [changelog][]._

[changelog]: https://github.com/nextstrain/augur/blob/-/CHANGES.md#readme

~~
}

main "$@"