|
|
|
@@ -35,9 +35,11 @@ concurrency:
|
|
|
|
|
jobs:
|
|
|
|
|
build-staging:
|
|
|
|
|
name: Build Staging ${{ matrix.service_display }} Image
|
|
|
|
|
runs-on: host
|
|
|
|
|
runs-on:
|
|
|
|
|
- saas
|
|
|
|
|
- build-farm
|
|
|
|
|
timeout-minutes: ${{ matrix.timeout }}
|
|
|
|
|
if: github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'develop')
|
|
|
|
|
if: github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'develop' || github.ref_name == 'test/runner-build-verify')
|
|
|
|
|
strategy:
|
|
|
|
|
fail-fast: false
|
|
|
|
|
matrix:
|
|
|
|
@@ -65,47 +67,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'INNERPY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
INNERPY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'INNERPY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nINNERPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
@@ -167,47 +130,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'INNERPY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
INNERPY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'INNERPY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nINNERPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
@@ -317,48 +241,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'PY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
PY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'PY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\n raise\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
@@ -397,48 +281,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'PY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
PY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'PY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\n raise\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
@@ -468,7 +312,9 @@ jobs:
|
|
|
|
|
'
|
|
|
|
|
build-production:
|
|
|
|
|
name: Build Production ${{ matrix.service_display }} Image
|
|
|
|
|
runs-on: host
|
|
|
|
|
runs-on:
|
|
|
|
|
- saas
|
|
|
|
|
- build-farm
|
|
|
|
|
timeout-minutes: ${{ matrix.timeout }}
|
|
|
|
|
needs:
|
|
|
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
|
|
@@ -499,47 +345,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'INNERPY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
INNERPY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'INNERPY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nINNERPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
@@ -602,47 +409,8 @@ jobs:
|
|
|
|
|
shell: sh
|
|
|
|
|
env:
|
|
|
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
|
|
|
run: |
|
|
|
|
|
set -eu
|
|
|
|
|
python3 - <<'INNERPY'
|
|
|
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
|
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
|
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
|
|
|
last_err = None
|
|
|
|
|
for attempt in range(5):
|
|
|
|
|
try:
|
|
|
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
|
|
|
archive = response.read()
|
|
|
|
|
break
|
|
|
|
|
except urllib.error.HTTPError as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if e.code >= 500 and attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
raise
|
|
|
|
|
except Exception as e:
|
|
|
|
|
last_err = e
|
|
|
|
|
if attempt < 4:
|
|
|
|
|
wait = 2 ** attempt
|
|
|
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
|
|
|
time.sleep(wait)
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
raise last_err
|
|
|
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
|
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
|
|
|
for member in tar.getmembers():
|
|
|
|
|
name = member.name
|
|
|
|
|
if name == root_prefix[:-1]:
|
|
|
|
|
continue
|
|
|
|
|
if name.startswith(root_prefix):
|
|
|
|
|
member.name = name[len(root_prefix):]
|
|
|
|
|
if member.name:
|
|
|
|
|
tar.extract(member, '.')
|
|
|
|
|
INNERPY
|
|
|
|
|
|
|
|
|
|
run: "set -eu\npython3 - <<'INNERPY'\nimport io, os, tarfile, time, urllib.request, urllib.error\nurl = f\"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz\"\nrequest = urllib.request.Request(url, headers={\"Authorization\": f\"token {os.environ['GITHUB_TOKEN']}\"})\nlast_err = None\nfor attempt in range(5):\n try:\n with urllib.request.urlopen(request, timeout=120) as response:\n archive = response.read()\n break\n except urllib.error.HTTPError as e:\n last_err = e\n if e.code >= 500 and attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...\")\n time.sleep(wait)\n continue\n raise\n except Exception as e:\n last_err = e\n if attempt < 4:\n wait = 2 ** attempt\n print(f\"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...\"'
|
|
|
|
|
)\n time.sleep(wait)\n continue\nelse:\n raise last_err\nwith tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:\n root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'\n for member in tar.getmembers():\n name = member.name\n if name == root_prefix[:-1]:\n continue\n if name.startswith(root_prefix):\n member.name = name[len(root_prefix):]\n if member.name:\n tar.extract(member, '.')\nINNERPY\n"
|
|
|
|
|
- name: Record job start time
|
|
|
|
|
shell: sh
|
|
|
|
|
run: 'set -eu
|
|
|
|
|