Created
February 26, 2026 08:00
-
-
Save mlt/2820399eff6d2ecf4a6ee19e033b09c3 to your computer and use it in GitHub Desktop.
Automatic updater for msys2 packages
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # https://github.com/msys2/MINGW-packages/discussions/28078 | |
| set -e | |
| if [ "$#" -ne 1 ]; then | |
| echo "Error: This script requires exactly 1 argument." >&2 | |
| echo "Usage: $0 <path/to/PKGBUILD>" >&2 | |
| exit 1 | |
| fi | |
| pkgbuild=$1 | |
| upstream=msys2/MINGW-packages | |
| source $pkgbuild | |
| echo -e "\e[36mChecking on new releases for $_realname ($pkgver)\e[0m" | |
| # from https://github.com/$repo | |
| for entry in "${msys2_references[@]}"; do | |
| if [[ $entry == anitya:* ]]; then | |
| value="${entry#*: }" | |
| echo "Using https://release-monitoring.org/project/$value/" | |
| version=$(curl -s https://release-monitoring.org/api/v2/versions/?project_id=$value | jq -r .latest_version) | |
| break | |
| fi | |
| done | |
| gh_regex='github\.com/([^/]+/[^/]+)' | |
| if [[ -z "$version" && "${source[0]}" =~ $gh_regex ]]; then | |
| # fallback for projects with GitHub releases | |
| repo=${BASH_REMATCH[1]} | |
| tag=$(gh release view --repo $repo --json tagName --template '{{.tagName}}') | |
| version=${tag##*-} # Remove everything before/including last hyphen | |
| version=${version#v} # Remove leading 'v' | |
| fi | |
| # second chance for GitHub in msys2_repository_url | |
| if [[ -z "$version" && "${msys2_repository_url}" =~ $gh_regex ]]; then | |
| # fallback for projects with GitHub releases | |
| repo=${BASH_REMATCH[1]} | |
| tag=$(gh release view --repo $repo --json tagName --template '{{.tagName}}') || true | |
| if [[ -z "$tag" ]]; then | |
| echo "hello" | |
| # maybe tags if not releases | |
| tag=$(gh api graphql -f query=' | |
| query($owner: String!, $name: String!) { | |
| repository(owner: $owner, name: $name) { | |
| refs(refPrefix: "refs/tags/", last: 1, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) { | |
| nodes { name } | |
| } | |
| } | |
| }' -f owner="${repo%/*}" -f name="${repo#*/}" --jq '.data.repository.refs.nodes[].name') | |
| fi | |
| version=${tag##*-} # Remove everything before/including last hyphen | |
| version=${version#v} # Remove leading 'v' | |
| fi | |
| if [[ -z "$version" ]]; then | |
| echo -e "\e[31mI don't know how to check for new release of $_realname.\e[0m" | |
| exit | |
| fi | |
| # makepkg --printsrcinfo | grep pkgver | awk '{print $3}' | |
| if [[ "$pkgver" != "$version" ]]; then | |
| echo "New release $version!" | |
| sed -i -e "s/^pkgver=.*/pkgver=$version/;s/^pkgrel=.*/pkgrel=1/" $pkgbuild | |
| updpkgsums $pkgbuild | |
| ( cd "${pkgbuild%/*}" && makepkg-mingw ) | |
| branch=$(git branch --show-current) | |
| # git worktree add | |
| if [[ "$branch" == "master" && $(git diff --cached --exit-code) ]]; then | |
| echo -e "\e[32mWe are on master branch without staged changes." | |
| echo -e "Let's commit into a new branch and open PR.'\e[0m" | |
| git switch -c $_realname | |
| git add $pkgbuild | |
| git commit -m "$_realname: update to $version" | |
| # FIXME externalize that in an env as all updates will be pushed to same remote | |
| # remote=$(git remote -v | awk -v user=$(gh api user -q ".login") '$0 ~ user {print $1; exit}') | |
| remote=$(git config --get-regexp '^remote\..*\.url$' "/$(gh api user -q .login)/" | cut -d. -f2) | |
| # overwrite previous version bumps if any | |
| git push $remote $realname --force | |
| git switch - | |
| gh pr create --draft --fill-first --base master --head $_realname --repo $upstream | |
| # --title "$_realname: update to $version" --body "Everything works again" | |
| else | |
| echo -e "\e[31mLooks like you are doing something at the moment in the repo. Can't do much more.\e[0m" | |
| fi | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment