[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [Git][tpo/applications/tor-browser-build][main] Bug 40864: Add a script to download the latest manual



Title: GitLab

Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build

Commits:

  • 11636bd7
    by Pier Angelo Vendrame at 2023-05-30T19:10:29+02:00
    Bug 40864: Add a script to download the latest manual
    
    We can use the same GitLab token we use to create the changelogs also
    to download the list of jobs in the manual project, and a new CI
    artifact if needed.
    

1 changed file:

Changes:

  • tools/fetch-manual.py
    1
    +#!/usr/bin/env python3
    
    2
    +import hashlib
    
    3
    +from pathlib import Path
    
    4
    +import sys
    
    5
    +
    
    6
    +import requests
    
    7
    +import yaml
    
    8
    +
    
    9
    +
    
    10
    +GITLAB = "https://gitlab.torproject.org"
    
    11
    +API_URL = f"{GITLAB}/api/v4"
    
    12
    +PROJECT_ID = 23
    
    13
    +REF_NAME = "main"
    
    14
    +
    
    15
    +
    
    16
    +token_file = Path(__file__).parent / ".changelogs_token"
    
    17
    +if not token_file.exists():
    
    18
    +    print("This scripts uses the same access token as fetch-changelog.py.")
    
    19
    +    print("However, the file has not been found.")
    
    20
    +    print(
    
    21
    +        "Please run fetch-changelog.py to get the instructions on how to "
    
    22
    +        "generate it."
    
    23
    +    )
    
    24
    +    sys.exit(1)
    
    25
    +with token_file.open() as f:
    
    26
    +    headers = {"PRIVATE-TOKEN": f.read().strip()}
    
    27
    +
    
    28
    +r = requests.get(f"{API_URL}/projects/{PROJECT_ID}/jobs", headers=headers)
    
    29
    +if r.status_code == 401:
    
    30
    +    print("Unauthorized! Maybe the token has expired.")
    
    31
    +    sys.exit(2)
    
    32
    +found = False
    
    33
    +for job in r.json():
    
    34
    +    if job["ref"] != REF_NAME:
    
    35
    +        continue
    
    36
    +    for art in job["artifacts"]:
    
    37
    +        if art["filename"] == "artifacts.zip":
    
    38
    +            found = True
    
    39
    +            break
    
    40
    +    if found:
    
    41
    +        break
    
    42
    +if not found:
    
    43
    +    print("Cannot find a usable job.")
    
    44
    +    sys.exit(3)
    
    45
    +
    
    46
    +pipeline_id = job["pipeline"]["id"]
    
    47
    +conf_file = Path(__file__).parent.parent / "projects/manual/config"
    
    48
    +with conf_file.open() as f:
    
    49
    +    config = yaml.load(f, yaml.SafeLoader)
    
    50
    +if int(config["version"]) == int(pipeline_id):
    
    51
    +    print(
    
    52
    +        "projects/manual/config is already using the latest pipeline. Nothing to do."
    
    53
    +    )
    
    54
    +    sys.exit(0)
    
    55
    +
    
    56
    +manual_dir = Path(__file__).parent.parent / "out/manual"
    
    57
    +manual_dir.mkdir(0o755, parents=True, exist_ok=True)
    
    58
    +manual_file = manual_dir / f"manual_{pipeline_id}.zip"
    
    59
    +sha256 = hashlib.sha256()
    
    60
    +if manual_file.exists():
    
    61
    +    with manual_file.open("rb") as f:
    
    62
    +        while chunk := f.read(8192):
    
    63
    +            sha256.update(chunk)
    
    64
    +    print("You already have the latest manual version in your out directory.")
    
    65
    +    print("Please update projects/manual/config to:")
    
    66
    +else:
    
    67
    +    print("Downloading the new version of the manual...")
    
    68
    +    url = f"{API_URL}/projects/{PROJECT_ID}/jobs/artifacts/{REF_NAME}/download?job={job['name']}"
    
    69
    +    r = requests.get(url, headers=headers, stream=True)
    
    70
    +    # https://stackoverflow.com/a/16696317
    
    71
    +    r.raise_for_status()
    
    72
    +    with manual_file.open("wb") as f:
    
    73
    +        for chunk in r.iter_content(chunk_size=8192):
    
    74
    +            f.write(chunk)
    
    75
    +            sha256.update(chunk)
    
    76
    +    print(f"File downloaded as {manual_file}.")
    
    77
    +    print(
    
    78
    +        "Please upload it to people.torproject.org and then update projects/manual/config:"
    
    79
    +    )
    
    80
    +sha256 = sha256.hexdigest()
    
    81
    +
    
    82
    +print(f"\tversion: {pipeline_id}")
    
    83
    +print(f"\tSHA256: {sha256}")

  • _______________________________________________
    tor-commits mailing list
    tor-commits@xxxxxxxxxxxxxxxxxxxx
    https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits