Skip to content

Instantly share code, notes, and snippets.

@cs224
Created June 16, 2023 07:12
Show Gist options
  • Save cs224/b67f985f9c807c4b4c6ab6dea4bbf41d to your computer and use it in GitHub Desktop.
Save cs224/b67f985f9c807c4b4c6ab6dea4bbf41d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Author: cs224\n",
"\n",
"Last updated: 2023-06-16\n",
"\n",
"Python implementation: CPython\n",
"Python version : 3.8.12\n",
"IPython version : 8.2.0\n",
"\n",
"numpy : 1.23.1\n",
"pandas: 1.4.2\n",
"\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -a 'cs224' -u -d -v -p numpy,pandas"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>.container { width:70% !important; }</style>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import display, HTML, Markdown\n",
"\n",
"from IPython.display import display_html\n",
"def display_side_by_side(*args):\n",
" html_str=''\n",
" for df in args:\n",
" if type(df) == np.ndarray:\n",
" df = pd.DataFrame(df)\n",
" html_str+=df.to_html()\n",
" html_str = html_str.replace('table','table style=\"display:inline\"')\n",
" # print(html_str)\n",
" display_html(html_str,raw=True)\n",
"\n",
"CSS = \"\"\"\n",
".output {\n",
" flex-direction: row;\n",
"}\n",
"\"\"\"\n",
"\n",
"def display_graphs_side_by_side(*args):\n",
" html_str='<table><tr>'\n",
" for g in args:\n",
" html_str += '<td>'\n",
" html_str += g._repr_svg_()\n",
" html_str += '</td>'\n",
" html_str += '</tr></table>'\n",
" display_html(html_str,raw=True)\n",
" \n",
"\n",
"display(HTML(\"<style>.container { width:70% !important; }</style>\"))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [Tools To Deal With Container Images](https://github.com/iximiuz/awesome-container-tinkering/blob/4dd6940e98c1a3571f6612e6075efd2cb1b223bb/IMAGES.md#image-distribution)\n",
"* https://github.com/regclient/regclient\n",
"* https://github.com/containers/skopeo"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# regctl image inspect ghcr.io/home-assistant/home-assistant:stable\n",
"# regctl image manifest ghcr.io/home-assistant/home-assistant:stable\n",
"# regctl image manifest --format raw-body ghcr.io/home-assistant/home-assistant:stable\n",
"# regctl artifact tree ghcr.io/home-assistant/home-assistant:stable\n",
"# regctl registry login\n",
"# regctl image ratelimit influxdb:latest\n",
"# {\n",
"# \"Remain\": 200,\n",
"# \"Limit\": 200,\n",
"# \"Reset\": 0,\n",
"# \"Set\": true,\n",
"# \"Policies\": [\n",
"# \"200;w=21600\"\n",
"# ]\n",
"# }"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np, pandas as pd\n",
"import subprocess, json, re, collections"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"image = 'ghcr.io/home-assistant/home-assistant:stable'\n",
"image_base = 'ghcr.io/home-assistant/home-assistant'"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def run_cmd(args, cwd = None, stdin_input=None, decode=True):\n",
" #out = subprocess.check_output(args, cwd=cwd)\n",
" if stdin_input is not None:\n",
" if isinstance(stdin_input, str):\n",
" stdin_input = str.encode(stdin_input)\n",
" out = subprocess.run(args, check=True, stdout=subprocess.PIPE, cwd=cwd, input=stdin_input).stdout #text=True, \n",
" else:\n",
" out = subprocess.run(args, check=True, stdout=subprocess.PIPE, cwd=cwd).stdout\n",
" \n",
" if decode:\n",
" return out.decode('utf-8')\n",
" else:\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def get_image_tags(image_ref, pattern=r'^.*$'):\n",
" cmd = f'regctl tag ls {image_ref}'\n",
" cmd = [itm for itm in cmd.split(' ') if itm != '']\n",
" result = run_cmd(cmd).strip()\n",
" result = result.split('\\n')\n",
" result = [r for r in result if re.match(pattern, r)]\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['2023.6.0.dev20230511',\n",
" '2023.6.0.dev20230513',\n",
" '2023.6.0.dev20230514',\n",
" '2023.6.0.dev20230515',\n",
" '2023.6.0.dev20230516',\n",
" '2023.6.0.dev20230517',\n",
" '2023.6.0.dev20230518',\n",
" '2023.6.0.dev20230519',\n",
" '2023.6.0.dev20230520',\n",
" '2023.6.0.dev20230521',\n",
" '2023.6.0.dev20230522',\n",
" '2023.6.0.dev20230523',\n",
" '2023.6.0.dev20230524',\n",
" '2023.6.0.dev20230525',\n",
" '2023.6.0.dev20230526',\n",
" '2023.6.0.dev20230527',\n",
" '2023.6.0.dev20230528',\n",
" '2023.6.0.dev20230529',\n",
" '2023.6.0.dev20230530',\n",
" '2023.6.0.dev20230531',\n",
" '2023.6.0b0',\n",
" '2023.6.0b1',\n",
" '2023.6.0b2',\n",
" '2023.6.0b3',\n",
" '2023.6.0b4',\n",
" '2023.6.0b5',\n",
" '2023.6.0b6',\n",
" '2023.6.1',\n",
" '2023.6.2',\n",
" '2023.7.0.dev20230601',\n",
" '2023.7.0.dev20230602',\n",
" '2023.7.0.dev20230603',\n",
" '2023.7.0.dev20230604',\n",
" '2023.7.0.dev20230605',\n",
" '2023.7.0.dev20230606',\n",
" '2023.7.0.dev20230607',\n",
" '2023.7.0.dev20230608',\n",
" '2023.7.0.dev20230609',\n",
" '2023.7.0.dev20230610',\n",
" '2023.7.0.dev20230611',\n",
" '2023.7.0.dev20230612',\n",
" '2023.7.0.dev20230613',\n",
" '2023.7.0.dev20230614',\n",
" '2023.7.0.dev20230615',\n",
" '2023.7.0.dev20230616',\n",
" 'beta',\n",
" 'dev',\n",
" 'latest',\n",
" 'rc',\n",
" 'stable']"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_image_tags(image_base)[-50:]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['2022.8.1',\n",
" '2022.8.2',\n",
" '2022.8.3',\n",
" '2022.8.4',\n",
" '2022.8.5',\n",
" '2022.8.6',\n",
" '2022.8.7',\n",
" '2022.9.0',\n",
" '2022.9.1',\n",
" '2022.9.2',\n",
" '2022.9.3',\n",
" '2022.9.4',\n",
" '2022.9.5',\n",
" '2022.9.6',\n",
" '2022.9.7',\n",
" '2023.1.0',\n",
" '2023.1.1',\n",
" '2023.1.2',\n",
" '2023.1.4',\n",
" '2023.1.5',\n",
" '2023.1.6',\n",
" '2023.1.7',\n",
" '2023.2.0',\n",
" '2023.2.1',\n",
" '2023.2.2',\n",
" '2023.2.3',\n",
" '2023.2.4',\n",
" '2023.2.5',\n",
" '2023.3.0',\n",
" '2023.3.1',\n",
" '2023.3.2',\n",
" '2023.3.3',\n",
" '2023.3.4',\n",
" '2023.3.5',\n",
" '2023.3.6',\n",
" '2023.4.0',\n",
" '2023.4.1',\n",
" '2023.4.2',\n",
" '2023.4.3',\n",
" '2023.4.4',\n",
" '2023.4.5',\n",
" '2023.4.6',\n",
" '2023.5.0',\n",
" '2023.5.1',\n",
" '2023.5.2',\n",
" '2023.5.3',\n",
" '2023.5.4',\n",
" '2023.6.0',\n",
" '2023.6.1',\n",
" '2023.6.2']"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_image_tags(image_base, pattern=r'^\\d\\d\\d\\d\\.\\d+\\.\\d+$')[-50:]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def get_image_metadata(image_ref, platform='linux/amd64'):\n",
" cmd = f'regctl image inspect --platform {platform} {image_ref}'\n",
" cmd = [itm for itm in cmd.split(' ') if itm != '']\n",
" result = run_cmd(cmd)\n",
" result = json.loads(result)\n",
" return result"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'2023-06-15T04:44:26.960037188Z'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_image_metadata(image)['created']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def get_image_manifest(image_ref):\n",
" cmd = f'regctl image manifest {image_ref}'\n",
" cmd = [itm for itm in cmd.split(' ') if itm != '']\n",
" result1 = run_cmd(cmd).split('\\n')[:3]\n",
" result = []\n",
" for r in result1:\n",
" result += [[_.strip() for _ in r.split(':')]]\n",
" result_ = result\n",
" \n",
" cmd = f'regctl image manifest --format raw-body {image_ref}'\n",
" cmd = [itm for itm in cmd.split(' ') if itm != '']\n",
" result = run_cmd(cmd)\n",
" result = json.loads(result)\n",
" return result_ + result['manifests']"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[['Name', 'ghcr.io/home-assistant/home-assistant', 'stable'],\n",
" ['MediaType', 'application/vnd.docker.distribution.manifest.list.v2+json'],\n",
" ['Digest',\n",
" 'sha256',\n",
" '8e069fcfddbd95c0acff88b9e515e3b208c2a5b4ad801a8f0cb8b55be417fc45'],\n",
" {'mediaType': 'application/vnd.docker.distribution.manifest.v2+json',\n",
" 'size': 6386,\n",
" 'digest': 'sha256:f2788cff750499781f5be851e95a0d1906141e22b4187aa8f5a150d0728d57fc',\n",
" 'platform': {'architecture': 'arm64', 'os': 'linux', 'variant': 'v8'}},\n",
" {'mediaType': 'application/vnd.docker.distribution.manifest.v2+json',\n",
" 'size': 6386,\n",
" 'digest': 'sha256:d23d82c22c4dc97a3d0c187d7cd9e8370033798222683c45b8b80a0ad8a81620',\n",
" 'platform': {'architecture': 'amd64', 'os': 'linux'}},\n",
" {'mediaType': 'application/vnd.docker.distribution.manifest.v2+json',\n",
" 'size': 6387,\n",
" 'digest': 'sha256:fc8754954cdabbd9ff670f0d5b8db08be5b6e80bdb6e83055335eb8b5e568362',\n",
" 'platform': {'architecture': 'arm', 'os': 'linux', 'variant': 'v6'}},\n",
" {'mediaType': 'application/vnd.docker.distribution.manifest.v2+json',\n",
" 'size': 6386,\n",
" 'digest': 'sha256:cca6f53f8c72c29a84697d9ae953bf2e0ad7099b4ae645ef748c5d84cb1ae36c',\n",
" 'platform': {'architecture': 'arm', 'os': 'linux', 'variant': 'v7'}},\n",
" {'mediaType': 'application/vnd.docker.distribution.manifest.v2+json',\n",
" 'size': 6386,\n",
" 'digest': 'sha256:2c9c9c97b60635f64f3ec0a0b68b0ce335db26af158d345d9f09f1cd5e1560da',\n",
" 'platform': {'architecture': '386', 'os': 'linux'}}]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = get_image_manifest(image)\n",
"r"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def generate_docker_image_overview(image_ref, tag_pattern=r'^.*$', tag_limit=20):\n",
" tags = get_image_tags(image_ref, pattern=tag_pattern)\n",
" tags.reverse()\n",
" r = []\n",
" for tag in tags[:tag_limit]:\n",
" img_ref = image_ref + ':' + tag\n",
" meta = get_image_metadata(img_ref)\n",
" dt = pd.to_datetime(meta['created'])\n",
" labels = meta['config']['Labels']\n",
" manifests = get_image_manifest(img_ref)\n",
" digest = ':'.join(manifests[2][1:])\n",
" platform = ''\n",
" entry = collections.OrderedDict(tag=tag, dt=dt, digest=digest, platform=platform, labels=json.dumps(labels))\n",
" r += [entry]\n",
" for manifest in manifests[3:]:\n",
" digest = manifest['digest']\n",
" platform = manifest['platform']['os'] + '/' + manifest['platform']['architecture']\n",
" entry = collections.OrderedDict(tag=tag, dt=dt, digest=digest, platform=platform, labels=json.dumps(labels))\n",
" r += [entry]\n",
" \n",
" rdf = pd.DataFrame(r)\n",
" return rdf"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 28.7 ms, sys: 79.6 ms, total: 108 ms\n",
"Wall time: 21.3 s\n"
]
}
],
"source": [
"%%time\n",
"ldf = generate_docker_image_overview(image_base, tag_pattern=r'^\\d\\d\\d\\d\\.\\d+\\.\\d+$', tag_limit=10)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tag</th>\n",
" <th>dt</th>\n",
" <th>digest</th>\n",
" <th>platform</th>\n",
" <th>labels</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:8e069fcfddbd95c0acff88b9e515e3b208c2a5b...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:f2788cff750499781f5be851e95a0d1906141e2...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:d23d82c22c4dc97a3d0c187d7cd9e8370033798...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:fc8754954cdabbd9ff670f0d5b8db08be5b6e80...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:cca6f53f8c72c29a84697d9ae953bf2e0ad7099...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2023.6.2</td>\n",
" <td>2023-06-15 04:44:26.960037188+00:00</td>\n",
" <td>sha256:2c9c9c97b60635f64f3ec0a0b68b0ce335db26a...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:d1dadb8e6ae23c76875c24b72c7af85cbf0e35f...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:f4a9ab7dc35ac54860dc302e354a7ed6d31f598...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:a29527b65f76ca36451aed4a4ae8859821c54e4...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:417bcfbbd3357486b06d24d7df2989707376d78...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:2b5353ac0757d74452495fa8fbe35827b87baed...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:15c7c127dca4c024ea541a858ee3f1422b7b4c2...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:a1f116fea0091f48ea5bf1323538afae176ab0f...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:d0c0aa9b48ecf65f4ca9d4b548b887d11f29139...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:cdeb41f8ee47ac85ab0861d7c25e339fd23a798...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:a90656ab6c58ebe18455929537ba685fb9ba218...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:2f8fe4dcaba6664f12c3760daa0ade3ffcb15e0...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2023.6.0</td>\n",
" <td>2023-06-07 14:17:50.352968105+00:00</td>\n",
" <td>sha256:49ae1363b4734a7ece2d5cfbebcce099a8e236d...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:2c631c99d7078072126e50050b57042ec5548b7...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:aace2c05d1c22903f5349a0ffa5ed74afc7abec...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:7d851868869d5b7633eda6d0c88828304f05a01...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:6106389e694e6eb3d26f33f024d377bbf00cd4b...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:e54b316ea9733f4fcace778c22ee20ad60fc4d6...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2023.5.4</td>\n",
" <td>2023-05-23 22:07:32.617477863+00:00</td>\n",
" <td>sha256:c381ad9968f711c64d4c36481312f6dbc5edab6...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:24ac7c2b44448cfd17fe02372b4a3ecbe120230...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:e34b66e7275b1783c7020c8c27300b9913ff3e6...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:654a2279df6b34203573bcb6096798dadc5441f...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:0a61a2024b644ce3bab8dfa01c745141096868a...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:d02169dee31829eb90930c1332318aa8f273094...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2023.5.3</td>\n",
" <td>2023-05-14 17:21:09.668837214+00:00</td>\n",
" <td>sha256:b3da8afb852dfefdd9414e2f0e52d8d632caa29...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:40c15990157cf3240f873c32bc5a327fa8fc2b1...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:0e32f1ef4cef379806fbace43cf49f99233f69a...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:1b961b865ec8679f3dc438a41ce4b1ed0114b19...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:9ce281df8bccfb301b6d86dfab3cdadadca1727...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:730c829a5704500e00fe4283626d06d7cce23cc...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>2023.5.2</td>\n",
" <td>2023-05-05 19:36:51.208333508+00:00</td>\n",
" <td>sha256:de2276535b3e7034e399c59b4d2b05c3e265e6e...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:fc2d1d28f9e1ae317b50f293ce36dd37e36a030...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:26354e7ebef8e1c85f53a9ab4ddb6f4c1f40930...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:2a161b8fb8ce22ad965656c8f513b8f82d0a646...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:49fc3c6abcc3b8016af1acb24aaeec0d7ea9c52...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:cf7c3003e4b324ba17c74c7cdc05e76164f064b...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>2023.5.1</td>\n",
" <td>2023-05-04 23:55:12.579704982+00:00</td>\n",
" <td>sha256:c40091823cfa8d453066fa07eb3fb45830d0dbc...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:2939bbadb03ff22b047da6c47f5c372d0ffdb24...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:9966316ad5a1ed67dfe8c4ed139995d8a5975a4...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:3de6c6dc0b2ecf3c0fbd433d437349d507156cb...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:c4174c0b300afc58d14f37422531dca9438e2ed...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:891a0177140523e7be3ec22d54ade22c569fff3...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>2023.5.0</td>\n",
" <td>2023-05-03 19:03:08.227804935+00:00</td>\n",
" <td>sha256:281fc2eed9845eea7e437eccd2320412ffb000a...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:f25710773690a4a0809797862b8762daf38774d...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:97752e894572f77af77e78a5b7cc595b346a73f...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:732a6d23ccb7d7de00c22ea0adc14bf846cb4f0...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:1652d63ce298be8ac934be4bcaf95b2d948f776...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:49e512096f0100038a8825c143372d10e85dcc2...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>2023.4.6</td>\n",
" <td>2023-04-22 00:44:00.828004568+00:00</td>\n",
" <td>sha256:ce82b13c3c3f157c5792a08cdd3b7f7b84428cc...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:37f519d97494dee68c4536515992961b52dc631...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>55</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:d642d13d3f3f2d031649603ad075ef8b74996e4...</td>\n",
" <td>linux/arm64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:417433e41c056d4f0fea0a5ee1b65b542f19025...</td>\n",
" <td>linux/amd64</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>57</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:3bb3624f438fe8ea9fa2078e527b6319587b199...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>58</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:e0279e4f19d0470b242f9f80f4f85ed9d79dd18...</td>\n",
" <td>linux/arm</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>2023.4.5</td>\n",
" <td>2023-04-18 02:35:17.189187876+00:00</td>\n",
" <td>sha256:75dc9e878f2a04262473b101f9191042d13a46b...</td>\n",
" <td>linux/386</td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tag dt \\\n",
"0 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"1 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"2 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"3 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"4 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"5 2023.6.2 2023-06-15 04:44:26.960037188+00:00 \n",
"6 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"7 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"8 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"9 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"10 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"11 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"12 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"13 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"14 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"15 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"16 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"17 2023.6.0 2023-06-07 14:17:50.352968105+00:00 \n",
"18 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"19 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"20 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"21 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"22 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"23 2023.5.4 2023-05-23 22:07:32.617477863+00:00 \n",
"24 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"25 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"26 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"27 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"28 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"29 2023.5.3 2023-05-14 17:21:09.668837214+00:00 \n",
"30 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"31 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"32 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"33 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"34 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"35 2023.5.2 2023-05-05 19:36:51.208333508+00:00 \n",
"36 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"37 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"38 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"39 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"40 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"41 2023.5.1 2023-05-04 23:55:12.579704982+00:00 \n",
"42 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"43 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"44 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"45 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"46 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"47 2023.5.0 2023-05-03 19:03:08.227804935+00:00 \n",
"48 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"49 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"50 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"51 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"52 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"53 2023.4.6 2023-04-22 00:44:00.828004568+00:00 \n",
"54 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"55 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"56 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"57 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"58 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"59 2023.4.5 2023-04-18 02:35:17.189187876+00:00 \n",
"\n",
" digest platform \\\n",
"0 sha256:8e069fcfddbd95c0acff88b9e515e3b208c2a5b... \n",
"1 sha256:f2788cff750499781f5be851e95a0d1906141e2... linux/arm64 \n",
"2 sha256:d23d82c22c4dc97a3d0c187d7cd9e8370033798... linux/amd64 \n",
"3 sha256:fc8754954cdabbd9ff670f0d5b8db08be5b6e80... linux/arm \n",
"4 sha256:cca6f53f8c72c29a84697d9ae953bf2e0ad7099... linux/arm \n",
"5 sha256:2c9c9c97b60635f64f3ec0a0b68b0ce335db26a... linux/386 \n",
"6 sha256:d1dadb8e6ae23c76875c24b72c7af85cbf0e35f... \n",
"7 sha256:f4a9ab7dc35ac54860dc302e354a7ed6d31f598... linux/arm64 \n",
"8 sha256:a29527b65f76ca36451aed4a4ae8859821c54e4... linux/amd64 \n",
"9 sha256:417bcfbbd3357486b06d24d7df2989707376d78... linux/arm \n",
"10 sha256:2b5353ac0757d74452495fa8fbe35827b87baed... linux/arm \n",
"11 sha256:15c7c127dca4c024ea541a858ee3f1422b7b4c2... linux/386 \n",
"12 sha256:a1f116fea0091f48ea5bf1323538afae176ab0f... \n",
"13 sha256:d0c0aa9b48ecf65f4ca9d4b548b887d11f29139... linux/arm64 \n",
"14 sha256:cdeb41f8ee47ac85ab0861d7c25e339fd23a798... linux/amd64 \n",
"15 sha256:a90656ab6c58ebe18455929537ba685fb9ba218... linux/arm \n",
"16 sha256:2f8fe4dcaba6664f12c3760daa0ade3ffcb15e0... linux/arm \n",
"17 sha256:49ae1363b4734a7ece2d5cfbebcce099a8e236d... linux/386 \n",
"18 sha256:2c631c99d7078072126e50050b57042ec5548b7... \n",
"19 sha256:aace2c05d1c22903f5349a0ffa5ed74afc7abec... linux/arm64 \n",
"20 sha256:7d851868869d5b7633eda6d0c88828304f05a01... linux/amd64 \n",
"21 sha256:6106389e694e6eb3d26f33f024d377bbf00cd4b... linux/arm \n",
"22 sha256:e54b316ea9733f4fcace778c22ee20ad60fc4d6... linux/arm \n",
"23 sha256:c381ad9968f711c64d4c36481312f6dbc5edab6... linux/386 \n",
"24 sha256:24ac7c2b44448cfd17fe02372b4a3ecbe120230... \n",
"25 sha256:e34b66e7275b1783c7020c8c27300b9913ff3e6... linux/arm64 \n",
"26 sha256:654a2279df6b34203573bcb6096798dadc5441f... linux/amd64 \n",
"27 sha256:0a61a2024b644ce3bab8dfa01c745141096868a... linux/arm \n",
"28 sha256:d02169dee31829eb90930c1332318aa8f273094... linux/arm \n",
"29 sha256:b3da8afb852dfefdd9414e2f0e52d8d632caa29... linux/386 \n",
"30 sha256:40c15990157cf3240f873c32bc5a327fa8fc2b1... \n",
"31 sha256:0e32f1ef4cef379806fbace43cf49f99233f69a... linux/arm64 \n",
"32 sha256:1b961b865ec8679f3dc438a41ce4b1ed0114b19... linux/amd64 \n",
"33 sha256:9ce281df8bccfb301b6d86dfab3cdadadca1727... linux/arm \n",
"34 sha256:730c829a5704500e00fe4283626d06d7cce23cc... linux/arm \n",
"35 sha256:de2276535b3e7034e399c59b4d2b05c3e265e6e... linux/386 \n",
"36 sha256:fc2d1d28f9e1ae317b50f293ce36dd37e36a030... \n",
"37 sha256:26354e7ebef8e1c85f53a9ab4ddb6f4c1f40930... linux/arm64 \n",
"38 sha256:2a161b8fb8ce22ad965656c8f513b8f82d0a646... linux/amd64 \n",
"39 sha256:49fc3c6abcc3b8016af1acb24aaeec0d7ea9c52... linux/arm \n",
"40 sha256:cf7c3003e4b324ba17c74c7cdc05e76164f064b... linux/arm \n",
"41 sha256:c40091823cfa8d453066fa07eb3fb45830d0dbc... linux/386 \n",
"42 sha256:2939bbadb03ff22b047da6c47f5c372d0ffdb24... \n",
"43 sha256:9966316ad5a1ed67dfe8c4ed139995d8a5975a4... linux/arm64 \n",
"44 sha256:3de6c6dc0b2ecf3c0fbd433d437349d507156cb... linux/amd64 \n",
"45 sha256:c4174c0b300afc58d14f37422531dca9438e2ed... linux/arm \n",
"46 sha256:891a0177140523e7be3ec22d54ade22c569fff3... linux/arm \n",
"47 sha256:281fc2eed9845eea7e437eccd2320412ffb000a... linux/386 \n",
"48 sha256:f25710773690a4a0809797862b8762daf38774d... \n",
"49 sha256:97752e894572f77af77e78a5b7cc595b346a73f... linux/arm64 \n",
"50 sha256:732a6d23ccb7d7de00c22ea0adc14bf846cb4f0... linux/amd64 \n",
"51 sha256:1652d63ce298be8ac934be4bcaf95b2d948f776... linux/arm \n",
"52 sha256:49e512096f0100038a8825c143372d10e85dcc2... linux/arm \n",
"53 sha256:ce82b13c3c3f157c5792a08cdd3b7f7b84428cc... linux/386 \n",
"54 sha256:37f519d97494dee68c4536515992961b52dc631... \n",
"55 sha256:d642d13d3f3f2d031649603ad075ef8b74996e4... linux/arm64 \n",
"56 sha256:417433e41c056d4f0fea0a5ee1b65b542f19025... linux/amd64 \n",
"57 sha256:3bb3624f438fe8ea9fa2078e527b6319587b199... linux/arm \n",
"58 sha256:e0279e4f19d0470b242f9f80f4f85ed9d79dd18... linux/arm \n",
"59 sha256:75dc9e878f2a04262473b101f9191042d13a46b... linux/386 \n",
"\n",
" labels \n",
"0 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"1 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"2 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"3 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"4 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"5 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"6 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"7 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"8 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"9 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"10 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"11 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"12 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"13 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"14 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"15 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"16 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"17 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"18 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"19 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"20 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"21 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"22 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"23 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"24 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"25 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"26 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"27 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"28 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"29 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"30 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"31 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"32 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"33 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"34 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"35 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"36 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"37 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"38 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"39 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"40 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"41 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"42 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"43 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"44 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"45 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"46 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"47 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"48 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"49 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"50 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"51 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"52 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"53 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"54 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"55 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"56 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"57 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"58 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... \n",
"59 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ldf"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"# docker image ls --digests\n",
"# docker image inspect --format '{{json .}}' ghcr.io/home-assistant/home-assistant:stable | jq .\n",
"# docker image inspect --format '{{json .}}' ghcr.io/home-assistant/home-assistant:stable | jq '.RepoDigests[0]'"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"repo_digest_part = 'd1dadb8e6'"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>tag</th>\n",
" <th>dt</th>\n",
" <th>digest</th>\n",
" <th>platform</th>\n",
" <th>labels</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2023.6.1</td>\n",
" <td>2023-06-08 19:24:18.420101786+00:00</td>\n",
" <td>sha256:d1dadb8e6ae23c76875c24b72c7af85cbf0e35f...</td>\n",
" <td></td>\n",
" <td>{\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tag dt \\\n",
"6 2023.6.1 2023-06-08 19:24:18.420101786+00:00 \n",
"\n",
" digest platform \\\n",
"6 sha256:d1dadb8e6ae23c76875c24b72c7af85cbf0e35f... \n",
"\n",
" labels \n",
"6 {\"io.hass.arch\": \"amd64\", \"io.hass.base.arch\":... "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ldf[ldf['digest'].str.contains(repo_digest_part)]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"# list(ldf['digest'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@cs224
Copy link
Author

cs224 commented Jun 16, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment