2025-10-22 09:20:23 +02:00

51 lines
1.7 KiB
YAML

name: Download Artifacts
description: Download artifacts preserving file permissions
inputs:
keys:
description: The artifact keys
required: true
runs:
using: composite
steps:
- name: Download artifacts
shell: python3 {0}
run: |
import sys
import os
sys.path.append(os.path.abspath('.github/workflows'))
from configure_logger import configure_logger
from github_api_request import json_github_api_request, download_github_api_request
from logging import getLogger
from os import environ
from zipfile import ZipFile
import tarfile
logger = getLogger(__name__)
configure_logger(logger)
input_keys = """${{ inputs.keys }}"""
logger.debug(f'Input keys: {input_keys}')
artifact_keys = list(filter(None, [x.strip() for x in input_keys.split('\n')]))
logger.info(f'Downloading keys: {artifact_keys}')
api_prefix = 'actions'
artifacts_info = json_github_api_request(f'{api_prefix}/runs/{environ["GITHUB_RUN_ID"]}/artifacts')
for key in artifact_keys:
artifact_id = [x['id'] for x in artifacts_info['artifacts'] if x['name'] == key][0]
logger.debug(f'Artifact id for {key}: {artifact_id}')
zip_file = f'{key}.zip'
download_github_api_request(zip_file, f'{api_prefix}/artifacts/{artifact_id}/zip')
logger.debug(f'Unzipping: {zip_file}')
with ZipFile(zip_file) as archive:
archive.extractall()
os.remove(zip_file)
tar_file = f'{key}.tar'
logger.debug(f'Extracting: {tar_file}')
with tarfile.open(tar_file, 'r') as tar:
tar.extractall()
os.remove(tar_file)