Docker パッケージを削除しようとしてみました(駄目だった)

2020年1月25日現在では Docker パッケージも各バージョンも削除機能は無いようでした。しばらく時間を空けて再度やってみようと思います。

このページでは一応やったことを残し、本格的に実装されたらアーカイブ化します。

やったこと

GitHub パーソナルアクセストークン取得

画像のようにreporead:packagesdelete:pacakges権限を持つアクセストークンを作ります。

パッケージの ID と各バージョン ID 取得

まず最初にパッケージ画面のココの番号はパッケージ ID でもバージョン ID でもないようです。

これらを取得するには API を叩きます。GraphQL でパッケージの ID と各バージョン ID を以下のようなクエリを組み立て、

query PackageVersions($owner: String!) {
  user(login: $owner) {
    registryPackagesForQuery(first: 10) {
      edges {
        node {
          id
          name
          versions(first: 10) {
            nodes {
              id
            }
          }
        }
      }
    }
  }
}

以下のような CURLリクエストすると、

curl -sSf -X POST  \
-H "Accept: application/vnd.github.package-deletes-preview+json" \
-H "Authorization: bearer <personal-access-token-token>" \
-d  '{"query": "<query>"}' \
https://api.github.com/graphql

以下のような JSON が得られます。

{
  "data": {
    "user": {
      "registryPackagesForQuery": {
        "edges": [
          {
            "node": {
              "id": "<package-id>",
              "name": "<package-name>",
              "versions": {
                "nodes": [
                  {
                    "id": "<version-id>"
                  },
                  {
                    "id": "<version-id>"
                  },
                ]
              }
            }
          },
          {
            "node": {
              "id": "<package-id>",
              "name": "<package-name>",
              "versions": {
                "nodes": [
                  {
                    "id": "<version-id>"
                  }
                ]
              }
            }
          },
        ]
      }
    }
  }
}

このnode.idが(恐らく)パッケージ ID、node.versions.nodes[].idが(恐らく)バージョン ID です。

削除しようとしてみる

またクエリを組み立てます。

mutation {
  deletePackageVersion(input: {packageVersionId: "<node.versions.nodes[].id>"}) {
    success
  }
}

それを CURL で送ります。

curl -sSf -X POST \
-H "Accept: application/vnd.github.package-deletes-preview+json" \
-H "Authorization: bearer b093587f422930d86c24106dfc30a4ae06100766" \
-d '{"query": "<query>"}' \
https://api.github.com/graphql

結果は以下のようでした。

{
  "data": {
    "deletePackageVersion": null
  },
  "errors": [
    {
      "type": "UNPROCESSABLE",
      "path": [
        "deletePackageVersion"
      ],
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "message": "Version deletion is currently unsupported for docker. For more on our deletion policy, see https://help.github.com/articles/about-github-package-registry/#deleting-a-package."
    }
  ]
}


Docker のそれはまだサポートされていないようです。パッケージを削除できそうな要素は他になさそうなので今の所無理そうでした。