¿Cómo eliminar tags Github no asignadas a un lanzamiento?

En nuestros repositorys GitHub tenemos un set de tags y un set de lanzamientos asignados a las tags.

Ahora nos gustaría eliminar las tags no asignadas a un lanzamiento.

¿Alguna idea de cómo hacer esto con los commands de git?

Gracias por una pista.

Atentamente

Puede usar la API de Github ref API y Github API con el analizador jq JSON para:

  • download todas las tags ref /git/refs/tags
  • download todos los lanzamientos y extraer el nombre de la label
  • eliminar la label de lanzamientos de la list de references de tags
  • borra las tags cuando estés listo

script:

 REPO=remotestorage/remotestorage.js TAG_LIST=$(curl -s "https://api.github.com/repos/$REPO/git/refs/tags?per_page=100" | \ jq '[ .[] | .ref ]') RELEASE_LIST=$(curl -s "https://api.github.com/repos/$REPO/releases?per_page=100" | \ jq '[ .[] | "refs/tags/" + .tag_name ]') NOT_IN_RELEASE=$(echo $TAG_LIST | jq --argjson releases "$RELEASE_LIST" '. - $releases' | jq -r '.[]') echo "$NOT_IN_RELEASE" # when you are ready # echo $NOT_IN_RELEASE | xargs git tag -d 

Tenga en count que si tiene más de 100 lanzamientos o tags, tendrá que atravesar la pagination


Con Github Graphql API v4 , puede combinar las 2 requestes anteriores en una sola. En el explorador :

 { repository(owner: "remotestorage", name: "remotestorage.js") { releases(first: 100) { nodes { tag { name } } } refs(first: 100, refPrefix: "refs/tags/") { nodes { name } } } } 

script sería:

 NOT_IN_RELEASE=$(curl -s -H "Authorization: bearer YOUR_ACCESS_TOKEN" -d ' { "query": "query { repository(owner: \"remotestorage\", name: \"remotestorage.js\") { releases(first: 100) { nodes { tag { name } } } refs(first: 100, refPrefix: \"refs/tags/\") {nodes { name } } } }" } ' https://api.github.com/graphql | \ jq -r '.data.repository | [.refs.nodes[].name] - [.releases.nodes[].tag.name] | .[]') echo "$NOT_IN_RELEASE" # when you are ready # echo $NOT_IN_RELEASE | xargs git tag -d