Skip to content

Commit cd399c1

Browse files
authored
Merge pull request #743 from MikroElektronika/mikrosdk-2.18.0-release
Fixed the http error
2 parents 7db0443 + 2b170c4 commit cd399c1

4 files changed

Lines changed: 30 additions & 112 deletions

File tree

scripts/compare_assets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def fetch_specified_release_version(repo, token, tag):
2323
print(f'GitHub API attempt {attempt}/5 (timeout=10s)')
2424
response = requests.get(url, headers=api_headers, timeout=10)
2525
response.raise_for_status()
26-
return support.get_specified_release(response.json(), tag)
26+
return support.get_specified_release(repo, api_headers, tag)
2727

2828
except requests.exceptions.RequestException as e:
2929
last_exception = e
@@ -34,7 +34,7 @@ def fetch_specified_release_version(repo, token, tag):
3434
print('Final attempt with extended timeout (600s)')
3535
response = requests.get(url, headers=api_headers, timeout=600)
3636
response.raise_for_status()
37-
return support.get_specified_release(response.json(), tag)
37+
return support.get_specified_release(repo, api_headers, tag)
3838

3939
except requests.exceptions.RequestException as e:
4040
print('\033[91mFinal attempt failed too\033[0m')

scripts/index.py

Lines changed: 13 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -42,73 +42,21 @@ def get_headers(api, token):
4242
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
4343
}
4444

45-
def fetch_all_releases(repo, token, api_headers):
46-
api_headers = get_headers(True, token)
47-
url = f"https://api.github.com/repos/{repo}/releases"
48-
49-
releases = []
50-
params = {
51-
"per_page": 100,
52-
"page": 1,
53-
}
54-
55-
while True:
56-
response = requests.get(url, headers=api_headers, params=params)
57-
response.raise_for_status()
58-
59-
page_releases = response.json()
60-
if not page_releases:
61-
break
62-
63-
releases.extend(page_releases)
64-
65-
if len(page_releases) < params["per_page"]:
66-
break
67-
68-
params["page"] += 1
69-
70-
return releases
71-
7245
# Function to fetch release details from GitHub
7346
def fetch_release_details(repo, token, version):
7447
api_headers = get_headers(True, token)
75-
response_acquired = False
76-
77-
# First: 5 fast attempts (10s timeout)
78-
for attempt in range(1, 6):
79-
try:
80-
print(f'GitHub API attempt {attempt}/5 (timeout=10s)')
81-
# Get all releases with pagination
82-
all_releases = fetch_all_releases(repo, token, api_headers)
83-
response_acquired = True
84-
break
85-
86-
except requests.exceptions.RequestException as e:
87-
last_exception = e
88-
print(f'\033[93mAttempt {attempt} failed:\033[0m {e}')
89-
90-
if not response_acquired:
91-
# Final fallback attempt (600s timeout)
92-
try:
93-
print('Final attempt with extended timeout (600s)')
94-
# Get all releases with pagination
95-
all_releases = fetch_all_releases(repo, token, api_headers)
96-
97-
except requests.exceptions.RequestException as e:
98-
print('\033[91mFinal attempt failed too\033[0m')
99-
raise last_exception from e
10048

10149
if "latest" == version:
102-
return support.get_latest_release(all_releases), support.get_previous_release(all_releases, True)
50+
return support.get_latest_release(repo, api_headers), None
10351
else:
10452
release_check = None
105-
release_check = support.get_specified_release(all_releases, version)
53+
release_check = support.get_specified_release(repo, api_headers, version)
10654
if release_check:
107-
return release_check, support.get_latest_release(all_releases)
55+
return release_check, support.get_latest_release(repo, api_headers)
10856
else:
10957
## Always fallback to latest release
11058
print("WARNING: Falling back to LATEST release.")
111-
return support.get_latest_release(all_releases), support.get_previous_release(all_releases, True)
59+
return support.get_latest_release(repo, api_headers), None
11260

11361
# Function to fetch content as JSON from the link
11462
def fetch_json_data(download_link, token):
@@ -514,48 +462,23 @@ def index_release_to_elasticsearch(es : Elasticsearch, index_name, release_detai
514462

515463
def is_release_latest(repo, token, release_version):
516464
api_headers = get_headers(True, token)
517-
url = f'https://api.github.com/repos/{repo}/releases'
518-
response_acquired = False
519-
520-
# First: 5 fast attempts (10s timeout)
521-
for attempt in range(1, 6):
522-
try:
523-
print(f'GitHub API attempt {attempt}/5 (timeout=10s)')
524-
# Get all releases with pagination
525-
all_releases = fetch_all_releases(repo, token, api_headers)
526-
response_acquired = True
527-
break
528-
529-
except requests.exceptions.RequestException as e:
530-
last_exception = e
531-
print(f'\033[93mAttempt {attempt} failed:\033[0m {e}')
532-
533-
if not response_acquired:
534-
# Final fallback attempt (600s timeout)
535-
try:
536-
print('Final attempt with extended timeout (600s)')
537-
# Get all releases with pagination
538-
all_releases = fetch_all_releases(repo, token, api_headers)
539-
540-
except requests.exceptions.RequestException as e:
541-
print('\033[91mFinal attempt failed too\033[0m')
542-
raise last_exception from e
543465

544-
latest_release = support.get_latest_release(all_releases)
466+
latest_release = support.get_latest_release(repo, api_headers)
467+
specified_release = support.get_specified_release(repo, api_headers, release_version)
545468
if 'latest' == release_version:
546-
return None, True
469+
return True
547470
else:
548-
return all_releases, release_version == latest_release['tag_name']
471+
return latest_release['tag_name'] == specified_release['tag_name']
549472

550-
def promote_to_latest(releases, repo, token, release_version):
473+
def promote_to_latest(repo, token, release_version):
551474
# Headers for authentication
552475
headers = {
553476
"Authorization": f"token {token}",
554477
"Accept": "application/vnd.github+json"
555478
}
556479

557480
# Step 1: Update the prerelease version and set it as not prerelease
558-
selected_release = support.get_specified_release(releases, release_version=release_version)
481+
selected_release = support.get_specified_release(repo, headers, release_version)
559482
if selected_release['prerelease']:
560483
data_selected_release = {
561484
"tag_name": selected_release['tag_name'],
@@ -575,7 +498,7 @@ def promote_to_latest(releases, repo, token, release_version):
575498
raise Exception(f"Failed to update release {selected_release['name']}: {response_1.status_code} - {response_1.text}")
576499

577500
# Step 2: Set the current latest release to prerelease
578-
latest_release = support.get_latest_release(releases)
501+
latest_release = support.get_latest_release(repo, headers)
579502
data_latest_release = {
580503
"prerelease": True
581504
}
@@ -654,6 +577,6 @@ def str2bool(v):
654577
# And then promote to latest if requested
655578
if (args.promote_release_to_latest):
656579
# If current release isn't latest already
657-
releases, is_latest = is_release_latest(args.repo, args.token, args.release_version)
580+
is_latest = is_release_latest(args.repo, args.token, args.release_version)
658581
if (not is_latest):
659-
promote_to_latest(releases, args.repo, args.token, args.release_version)
582+
promote_to_latest(args.repo, args.token, args.release_version)

scripts/support.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,21 @@ class Colors:
1313
BOLD = '\033[1m'
1414
UNDERLINE = '\033[4m'
1515

16-
def get_previous_release(releases, prerelases=None):
17-
''' Fetch the previously released version '''
18-
for counter, release in enumerate(releases):
19-
if not release['draft']:
20-
if prerelases:
21-
if release['prerelease']:
22-
continue
23-
if counter + 1 < len(releases):
24-
return releases[counter + 1]
25-
else:
26-
return None
27-
return None
28-
29-
def get_latest_release(releases):
30-
''' Fetch the latest released version '''
31-
return next((release for release in releases if not release['prerelease'] and not release['draft']), None)
16+
def get_latest_release(repo, api_headers):
17+
''' Fetch the version that is labeled as "latest" '''
18+
url = f"https://api.github.com/repos/{repo}/releases/latest"
19+
resp = requests.get(url, headers=api_headers, timeout=30)
20+
resp.raise_for_status()
21+
latest_release = resp.json()
22+
return latest_release
3223

33-
def get_specified_release(releases, release_version):
34-
''' Fetch the latest released version '''
35-
return next((release for release in releases if release_version == release['tag_name']), None)
24+
def get_specified_release(repo, api_headers, release_version):
25+
''' Fetch the specified released version '''
26+
url = f'https://api.github.com/repos/{repo}/releases/tags/{release_version}'
27+
resp = requests.get(url, headers=api_headers, timeout=30)
28+
resp.raise_for_status()
29+
specified_release = resp.json()
30+
return specified_release
3631

3732
def determine_archive_type(byte_stream):
3833
'''

scripts/update_board_changelog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def fetch_latest_release_version(repo, token):
5555
except requests.exceptions.RequestException as e:
5656
print('\033[91mFinal attempt failed too\033[0m')
5757
raise last_exception from e
58-
return support.get_latest_release(response.json())
58+
return support.get_latest_release(repo, api_headers)
5959

6060
def edit_changelog(version):
6161
found_file, file_dir = find_file(os.path.join(os.getcwd(), "changelog"), "new_hw.md")

0 commit comments

Comments
 (0)