Generate a page for `pip --find-links` from the GitHub releases API (#10581)
This is incorporated into the docs pipeline and served on the website.
This isn't really the ideal place to serve it and we should probably
create a new subdomain and host a PEP 503 compliant index there. But
this will unbreak people for now.
Part of https://github.com/iree-org/iree/issues/10479
diff --git a/.github/workflows/publish_website.yml b/.github/workflows/publish_website.yml
index 7da0a97..6f9a238 100644
--- a/.github/workflows/publish_website.yml
+++ b/.github/workflows/publish_website.yml
@@ -34,8 +34,17 @@
uses: actions/setup-python@7f80679172b057fc5e90d70d197929d454754a5a # v2
with:
python-version: 3.x
- - name: Installing Material for MkDocs
- run: pip install mkdocs-material
+ cache: 'pip'
+ - name: Installing dependencies
+ run: |
+ pip install \
+ mkdocs-material \
+ requests
+ - name: Generating release index
+ run: |
+ build_tools/scripts/generate_release_index.py \
+ --repo="${GITHUB_REPOSITORY}" \
+ --output=docs/website/docs/pip-release-links.html
- name: Setting git config
run: |
git config --local user.email "iree-github-actions-bot@google.com"
diff --git a/build_tools/scripts/generate_release_index.py b/build_tools/scripts/generate_release_index.py
new file mode 100755
index 0000000..f0a3cfc
--- /dev/null
+++ b/build_tools/scripts/generate_release_index.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# Copyright 2022 The IREE Authors
+#
+# Licensed under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+"""Creates an HTML page for releases for `pip install --find-links` from GitHub releases."""
+# TODO(#10479) since we're generating this we might as well create a PEP 503
+# compliant index
+import argparse
+import html
+import json
+import subprocess
+import sys
+import textwrap
+
+import requests
+
+
+def parse_arguments():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--repo",
+ "--repository",
+ default="iree-org/iree",
+ help="The GitHub repository to fetch releases from.")
+ parser.add_argument(
+ "--output",
+ default="-",
+ help="The file to write the HTML to or '-' for stdout (the default)")
+ return parser.parse_args()
+
+
+class ReleaseFetcher:
+
+ def __init__(self, repo, per_page=100):
+ self._session = requests.Session()
+ self._repo = repo
+ self._per_page = per_page
+
+ def get_all(self):
+ url = f"https://api.github.com/repos/{self._repo}/releases"
+ page = 1
+
+ while True:
+ response = self._session.get(url,
+ params={
+ "page": page,
+ "per_page": self._per_page,
+ })
+ for release in response.json():
+ yield release
+ if "next" not in response.links:
+ break
+ page += 1
+
+
+def main(args):
+ fetcher = ReleaseFetcher(repo=args.repo)
+ with (sys.stdout if args.output == "-" else open(args.output, "w")) as f:
+ f.write(
+ textwrap.dedent("""\
+ <!DOCTYPE html>
+ <html>
+ <body>
+ """))
+ for release in fetcher.get_all():
+ if release["draft"]:
+ continue
+ for asset in release["assets"]:
+ url = html.escape(asset['browser_download_url'])
+ name = html.escape(asset['name'])
+ f.write(f" <a href={url}>{name}</a>\n")
+ f.write(textwrap.dedent("""\
+ </body>
+ </html>
+ """))
+
+
+if __name__ == "__main__":
+ main(parse_arguments())