|
4 | 4 | import gnupg
|
5 | 5 | import git
|
6 | 6 | import shutil
|
| 7 | +import re |
| 8 | +import json |
| 9 | +from debian.debfile import DebFile |
7 | 10 | from key import detectPublicKey, importPrivateKey
|
8 | 11 |
|
9 | 12 | debug = os.environ.get('INPUT_DEBUG', False)
|
|
17 | 20 | logging.info('-- Parsing input --')
|
18 | 21 |
|
19 | 22 | github_token = os.environ.get('INPUT_GITHUB_TOKEN')
|
20 |
| - arch = os.environ.get('INPUT_ARCH') |
21 |
| - version = os.environ.get('INPUT_VERSION') |
22 |
| - deb_file = os.environ.get('INPUT_FILE') |
23 |
| - deb_file_version = os.environ.get('INPUT_FILE_TARGET_VERSION') |
| 23 | + supported_arch = os.environ.get('INPUT_ARCH') |
| 24 | + supported_version = os.environ.get('INPUT_VERSION') |
| 25 | + deb_file_path = os.environ.get('INPUT_FILE') |
| 26 | + deb_file_target_version = os.environ.get('INPUT_FILE_TARGET_VERSION') |
24 | 27 | github_repo = os.environ.get('GITHUB_REPOSITORY')
|
25 | 28 |
|
26 | 29 | gh_branch = os.environ.get('INPUT_PAGE_BRANCH', 'gh-pages')
|
27 | 30 | apt_folder = os.environ.get('INPUT_REPO_FOLDER', 'repo')
|
28 | 31 |
|
29 |
| - if None in (github_token, arch, version, deb_file): |
| 32 | + if None in (github_token, supported_arch, supported_version, deb_file_path): |
30 | 33 | logging.error('Required key is missing')
|
31 | 34 | sys.exit(1)
|
32 | 35 |
|
33 |
| - arch_list = arch.strip().split('\n') |
34 |
| - version_list = version.strip().split('\n') |
35 |
| - deb_file_list = deb_file.strip().split('\n') |
36 |
| - deb_file_version_list = deb_file_version.strip().split('\n') |
| 36 | + supported_arch_list = supported_arch.strip().split('\n') |
| 37 | + supported_version_list = supported_version.strip().split('\n') |
| 38 | + deb_file_list = deb_file_path.strip().split('\n') |
| 39 | + deb_file_version_list = deb_file_target_version.strip().split('\n') |
37 | 40 |
|
38 |
| - logging.debug(arch_list) |
39 |
| - logging.debug(version_list) |
| 41 | + logging.debug(supported_arch_list) |
| 42 | + logging.debug(supported_version_list) |
40 | 43 | logging.debug(deb_file_list)
|
41 | 44 | logging.debug(deb_file_version_list)
|
42 | 45 |
|
43 |
| - if any((target_version not in version_list) for target_version in deb_file_version_list): |
| 46 | + if any( |
| 47 | + (target_version not in supported_version_list) for target_version in deb_file_version_list |
| 48 | + ): |
44 | 49 | logging.error('File version target is not listed in repo supported version list')
|
45 | 50 | sys.exit(1)
|
46 | 51 |
|
|
49 | 54 | key_passphrase = os.environ.get('INPUT_KEY_PASSPHRASE')
|
50 | 55 |
|
51 | 56 | logging.debug(github_token)
|
52 |
| - logging.debug(arch_list) |
53 |
| - logging.debug(version_list) |
| 57 | + logging.debug(supported_arch_list) |
| 58 | + logging.debug(supported_version_list) |
54 | 59 |
|
55 | 60 | logging.info('-- Done parsing input --')
|
56 | 61 |
|
|
70 | 75 | branch=gh_branch,
|
71 | 76 | )
|
72 | 77 |
|
73 |
| - if git_repo.head.commit.message[:12] == '[apt-action]': |
74 |
| - logging.info('Loop detected, exiting') |
75 |
| - sys.exit(0) |
| 78 | + # Generate metadata |
| 79 | + deb_file_handle = DebFile(filename=deb_file_path) |
| 80 | + deb_file_control = deb_file_handle.debcontrol() |
| 81 | + |
| 82 | + current_metadata = { |
| 83 | + 'format_version': 1, |
| 84 | + 'sw_version': deb_file_control['Version'], |
| 85 | + 'sw_architecture': deb_file_control['Architecture'], |
| 86 | + 'linux_version': deb_file_target_version |
| 87 | + } |
| 88 | + |
| 89 | + current_metadata_str = json.dumps(current_metadata) |
| 90 | + logging.debug('Metadata {}'.format(current_metadata_str)) |
| 91 | + |
| 92 | + # Get metadata |
| 93 | + all_commit = git_repo.iter_commits() |
| 94 | + all_apt_action_commit = filter(lambda x: (x.message[:12] == '[apt-action]'), all_commit) |
| 95 | + apt_action_metadata_str = map(lambda x: re.findall('apt-action-metadata({.+})$', x.message)) |
| 96 | + apt_action_metadata = map(lambda x: json.loads(x[0])) |
| 97 | + |
| 98 | + logging.debug(apt_action_metadata) |
| 99 | + |
| 100 | + for check_metadata in apt_action_metadata: |
| 101 | + if (check_metadata == current_metadata): |
| 102 | + logging.error('Loop detected, exiting') |
| 103 | + sys.exit(1) |
76 | 104 |
|
77 | 105 | logging.info('-- Done cloning current Github page --')
|
78 | 106 |
|
|
102 | 130 |
|
103 | 131 | logging.debug('Creating repo config')
|
104 | 132 |
|
105 |
| - with open(os.path.join(apt_conf_dir, 'distributions'), "w") as distributions_file: |
106 |
| - for codename in version_list: |
| 133 | + with open(os.path.join(apt_conf_dir, 'distributions'), 'w') as distributions_file: |
| 134 | + for codename in supported_version_list: |
107 | 135 | distributions_file.write('Description: {}\n'.format(github_repo))
|
108 | 136 | distributions_file.write('Codename: {}\n'.format(codename))
|
109 |
| - distributions_file.write('Architectures: {}\n'.format(' '.join(arch_list))) |
| 137 | + distributions_file.write('Architectures: {}\n'.format(' '.join(supported_arch_list))) |
110 | 138 | distributions_file.write('Components: main\n')
|
111 | 139 | distributions_file.write('SignWith: {}\n'.format(private_key_id))
|
112 | 140 | distributions_file.write('\n\n')
|
|
144 | 172 | )
|
145 | 173 |
|
146 | 174 | git_repo.git.add('*')
|
147 |
| - git_repo.index.commit('[apt-action] Update apt repo') |
| 175 | + git_repo.index.commit( |
| 176 | + '[apt-action] Update apt repo\n\n\napt-action-metadata{}'.format(current_metadata_str) |
| 177 | + ) |
148 | 178 | origin = git_repo.remote()
|
149 | 179 | origin.push()
|
150 | 180 |
|
|
0 commit comments