Clean up the packaging procedure

This commit is contained in:
Daniele Varrazzo 2021-05-29 21:55:50 +01:00
parent 06c3c3a557
commit 521981584d
3 changed files with 54 additions and 6 deletions

View File

@ -52,7 +52,7 @@ How to make a psycopg2 release
- When the workflows have finished download the packages using the - When the workflows have finished download the packages using the
``download_packages.py`` and ``download_packages_appveyor.py`` scripts from ``download_packages.py`` and ``download_packages_appveyor.py`` scripts from
the ``scripts/build`` directory. They will be saved in a the ``scripts/build`` directory. They will be saved in a
``psycopg2-${VERSION}`` directory. ``packages/psycopg2-${VERSION}`` directory.
- Remove the ``.exe`` from the dir, because we don't want to upload them on - Remove the ``.exe`` from the dir, because we don't want to upload them on
PyPI:: PyPI::

View File

@ -6,15 +6,14 @@ import io
import os import os
import sys import sys
import logging import logging
import datetime as dt
from pathlib import Path from pathlib import Path
from zipfile import ZipFile from zipfile import ZipFile
import requests import requests
logger = logging.getLogger() logger = logging.getLogger()
logging.basicConfig( logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s"
)
REPOS = "psycopg/psycopg2" REPOS = "psycopg/psycopg2"
WORKFLOW_NAME = "Build packages" WORKFLOW_NAME = "Build packages"
@ -43,7 +42,17 @@ def main():
else: else:
raise ScriptError(f"couldn't find {WORKFLOW_NAME!r} in recent runs") raise ScriptError(f"couldn't find {WORKFLOW_NAME!r} in recent runs")
logger.info(f"looking for run {run['id']} artifacts") if run["status"] != "completed":
raise ScriptError(f"run #{run['run_number']} is in status {run['status']}")
updated_at = dt.datetime.fromisoformat(run["updated_at"].replace("Z", "+00:00"))
now = dt.datetime.now(dt.timezone.utc)
age = now - updated_at
logger.info(f"found run #{run['run_number']} updated {pretty_interval(age)} ago")
if age > dt.timedelta(hours=6):
logger.warning("maybe it's a bit old?")
logger.info(f"looking for run #{run['run_number']} artifacts")
resp = s.get(f"{run['url']}/artifacts") resp = s.get(f"{run['url']}/artifacts")
resp.raise_for_status() resp.raise_for_status()
artifacts = resp.json()["artifacts"] artifacts = resp.json()["artifacts"]
@ -64,6 +73,19 @@ def main():
logger.info(f"now you can run: 'twine upload -s {dest}/*'") logger.info(f"now you can run: 'twine upload -s {dest}/*'")
def pretty_interval(td):
secs = td.total_seconds()
mins, secs = divmod(secs, 60)
hours, mins = divmod(mins, 60)
days, hours = divmod(hours, 24)
if days:
return f"{int(days)} days, {int(hours)} hours, {int(mins)} minutes"
elif hours:
return f"{int(hours)} hours, {int(mins)} minutes"
else:
return f"{int(mins)} minutes"
if __name__ == "__main__": if __name__ == "__main__":
try: try:
sys.exit(main()) sys.exit(main())

View File

@ -3,8 +3,10 @@
""" """
import os import os
import re
import sys import sys
import logging import logging
import datetime as dt
from pathlib import Path from pathlib import Path
import requests import requests
@ -35,6 +37,18 @@ def main():
resp = s.get(f"{API_URL}/projects/{REPOS}/") resp = s.get(f"{API_URL}/projects/{REPOS}/")
resp.raise_for_status() resp.raise_for_status()
data = resp.json() data = resp.json()
updated_at = dt.datetime.fromisoformat(
re.sub(r"\.\d+", "", data["build"]["finished"])
)
now = dt.datetime.now(dt.timezone.utc)
age = now - updated_at
logger.info(
f"found build {data['build']['version']} updated {pretty_interval(age)} ago"
)
if age > dt.timedelta(hours=6):
logger.warning("maybe it's a bit old?")
jobs = data["build"]["jobs"] jobs = data["build"]["jobs"]
for job in jobs: for job in jobs:
if job["status"] != "success": if job["status"] != "success":
@ -63,6 +77,19 @@ def main():
logger.info("now you can run: 'twine upload -s packages/*'") logger.info("now you can run: 'twine upload -s packages/*'")
def pretty_interval(td):
secs = td.total_seconds()
mins, secs = divmod(secs, 60)
hours, mins = divmod(mins, 60)
days, hours = divmod(hours, 24)
if days:
return f"{int(days)} days, {int(hours)} hours, {int(mins)} minutes"
elif hours:
return f"{int(hours)} hours, {int(mins)} minutes"
else:
return f"{int(mins)} minutes"
if __name__ == "__main__": if __name__ == "__main__":
try: try:
sys.exit(main()) sys.exit(main())
@ -74,4 +101,3 @@ if __name__ == "__main__":
except KeyboardInterrupt: except KeyboardInterrupt:
logger.info("user interrupt") logger.info("user interrupt")
sys.exit(1) sys.exit(1)