#!/bin/bash # expects: # env variable FORGEJO_TOKEN # file out_of_date IFS=' ' repo=${downstream/*\/} does_it_exist() { name=$1 downstream_version=$2 upstream_version=$3 repo=$4 query="$repo/$name: upgrade to $upstream_version" query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" )" if [ "$result" == "[]" ]; then return 1 fi } is_it_old() { name=$1 downstream_version=$2 upstream_version=$3 repo=$4 query="$repo/$name: upgrade to" query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" )" result_title="$(echo $result | jq -r '.[].title' )" result_id="$(echo $result | jq -r '.[].number' )" result_upstream_version="$(echo $result_title | awk '{print $4}')" if [ "$upstream_version" != "$result_upstream_version" ]; then echo $result_id else echo 0 fi } update_title() { name=$1 downstream_version=$2 upstream_version=$3 repo=$4 id=$5 result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"$repo/$name: upgrade to $upstream_version\" }" ) return 0 } create_issue() { name=$1 downstream_version=$2 upstream_version=$3 repo=$4 result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"$repo/$name: upgrade to $upstream_version\", \"labels\": [ $LABEL_NUMBER ] }") return 0 } if [ -f out_of_date ]; then out_of_date="$(cat out_of_date)" echo "Detected $(wc -l out_of_date) out-of-date packages, creating issues" for pkg in $out_of_date; do name="$(echo $pkg | awk '{print $1}')" downstream_version="$(echo $pkg | awk '{print $2}')" upstream_version="$(echo $pkg | awk '{print $3}')" repo="$(echo $pkg | awk '{print $4}')" if does_it_exist $name $downstream_version $upstream_version $repo; then echo "Issue for $repo/$name already exists" continue fi id=$(is_it_old $name $downstream_version $upstream_version $repo) if [ "$id" != "0" ] && [ -n "$id" ]; then echo "Issue for $repo/$name needs updating" update_title $name $downstream_version $upstream_version $repo $id continue fi echo "Creating issue for $repo/$name" create_issue $name $downstream_version $upstream_version $repo done fi if [ -f not_in_anitya ]; then query="Add missing $repo packages to anitya" query="$(echo $query | sed 's| |%20|g')" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" )" if [ "$result" == "[]" ]; then echo "Creating anitya issue" result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"Add missing $repo packages to anitya\", \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\", \"labels\": [ $LABEL_NUMBER ] }") else echo "Updating anitya issue" result_id="$(echo $result | jq -r '.[].number' )" result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ -H 'accept: application/json' \ -H "authorization: Basic $FORGEJO_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\" }" ) fi fi