Skip to content

Commit 6aba8cf

Browse files
committed
Cleanup and update input
1 parent 73ee849 commit 6aba8cf

File tree

3 files changed

+87
-61
lines changed

3 files changed

+87
-61
lines changed

action.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: "Github page APT repo"
22
description: "Setup and manage APT repo"
33
inputs:
44
github_token:
5-
description: "Github token"
5+
description: "Github token with commit and push scope"
66
required: true
77
arch:
88
description: "Newline-delimited list of supported architecture"
@@ -22,8 +22,8 @@ inputs:
2222
private_key:
2323
description: "GPG private key for signing apt repo"
2424
required: true
25-
key_secret:
26-
description: "Secret of GPG key"
25+
key_passphrase:
26+
description: "Passphrase of GPG private key"
2727
required: false
2828
page_branch:
2929
description: "Branch of Github page"
@@ -36,7 +36,6 @@ inputs:
3636
debug:
3737
description: "Print debug log"
3838
required: false
39-
default: false
4039
runs:
4140
using: "docker"
4241
image: "Dockerfile"

entrypoint.py

Lines changed: 23 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import gnupg
55
import git
66
import shutil
7+
from key import detectPublicKey, importPrivateKey
78

8-
debug = os.environ.get('INPUT_DEBUG')
9+
debug = os.environ.get('INPUT_DEBUG', False)
910

1011
if debug:
1112
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG)
@@ -43,17 +44,19 @@
4344
logging.error('File version target is not listed in repo supported version list')
4445
sys.exit(1)
4546

46-
pub_key = os.environ.get('INPUT_PUBLIC_KEY')
47-
sign_key = os.environ.get('INPUT_PRIVATE_KEY')
48-
secret = os.environ.get('INPUT_KEY_SECRET')
47+
key_public = os.environ.get('INPUT_PUBLIC_KEY')
48+
key_private = os.environ.get('INPUT_PRIVATE_KEY')
49+
key_passphrase = os.environ.get('INPUT_KEY_PASSPHRASE')
4950

5051
logging.debug(github_token)
5152
logging.debug(arch_list)
5253
logging.debug(version_list)
5354

5455
logging.info('-- Done parsing input --')
5556

56-
logging.info('-- Cloning current repo --')
57+
# Clone repo
58+
59+
logging.info('-- Cloning current Github page --')
5760

5861
github_user = github_repo.split('/')[0]
5962
github_slug = github_repo.split('/')[1]
@@ -73,71 +76,27 @@
7376

7477
logging.info('-- Done cloning current Github page --')
7578

76-
logging.info('-- Importing key --')
77-
78-
logging.info('Detecting public key')
79+
# Prepare key
7980

80-
logging.debug('Detecting existing public key')
81+
logging.info('-- Importing key --')
8182

8283
key_dir = os.path.join(github_slug, 'public.key')
83-
key_exists = os.path.isfile(key_dir)
84-
85-
logging.debug('Existing public key file exists? {}'.format(key_exists))
86-
8784
gpg = gnupg.GPG()
8885

89-
if not key_exists:
90-
logging.info('Directory doesn\'t contain public.key trying to import')
91-
if pub_key is None:
92-
logging.error('Please specify public key for setup')
93-
sys.exit(1)
94-
95-
logging.debug('Trying to import key')
96-
97-
public_import_result = gpg.import_keys(pub_key)
98-
public_import_result.ok_reason
99-
100-
logging.debug(public_import_result)
101-
102-
if public_import_result.count != 1:
103-
logging.error('Invalid public key provided, please provide 1 valid key')
104-
sys.exit(1)
105-
106-
with open(key_dir, 'w') as key_file:
107-
key_file.write(pub_key)
108-
109-
logging.info('Public key valid')
110-
111-
logging.info('Importing private key')
112-
113-
private_import_result = gpg.import_keys(sign_key)
114-
115-
if private_import_result.count != 1:
116-
logging.error('Invalid private key provided, please provide 1 valid key')
117-
sys.exit(1)
118-
119-
logging.debug(private_import_result)
120-
121-
if not any(data['ok'] >= '16' for data in private_import_result.results):
122-
logging.error('Key provided is not a secret key')
123-
sys.exit(1)
124-
125-
private_key_id = private_import_result.results[0]['fingerprint']
126-
127-
logging.info('Private key valid')
128-
129-
logging.debug('Key id: {}'.format(private_key_id))
86+
detectPublicKey(gpg, key_dir, key_public)
87+
private_key_id = importPrivateKey(gpg, key_private)
13088

13189
logging.info('-- Done importing key --')
13290

91+
# Prepare repo
92+
13393
logging.info('-- Preparing repo directory --')
13494

13595
apt_dir = os.path.join(github_slug, apt_folder)
136-
13796
apt_conf_dir = os.path.join(apt_dir, 'conf')
13897

13998
if not os.path.isdir(apt_folder):
140-
logging.debug('Existing repo not detected, creating new repo')
99+
logging.info('Existing repo not detected, creating new repo')
141100
os.mkdir(apt_dir)
142101
os.mkdir(apt_conf_dir)
143102

@@ -154,9 +113,12 @@
154113

155114
logging.info('-- Done preparing repo directory --')
156115

116+
# Fill repo
117+
157118
logging.info('-- Adding package to repo --')
158119

159120
for deb, target in zip(deb_file_list, deb_file_version_list):
121+
logging.info('Adding {}'.format(deb))
160122
os.system(
161123
'reprepro -b {} --export=silent-never includedeb {} {}'.format(
162124
apt_dir,
@@ -165,12 +127,16 @@
165127
)
166128
)
167129

168-
gpg.sign('test', keyid=private_key_id, passphrase=secret)
130+
logging.debug('Signing to unlock key on gpg agent')
131+
gpg.sign('test', keyid=private_key_id, passphrase=key_passphrase)
169132

133+
logging.debug('Export and sign repo')
170134
os.system('reprepro -b {} export'.format(apt_dir))
171135

172136
logging.info('-- Done adding package to repo --')
173137

138+
# Commiting and push changes
139+
174140
logging.info('-- Saving changes --')
175141

176142
git_repo.config_writer().set_value(

key.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import logging
2+
import os
3+
import sys
4+
5+
6+
def detectPublicKey(gpg, key_dir, pub_key):
7+
logging.info('Detecting public key')
8+
9+
logging.debug('Detecting existing public key')
10+
11+
key_exists = os.path.isfile(key_dir)
12+
13+
logging.debug('Existing public key file exists? {}'.format(key_exists))
14+
15+
if not key_exists:
16+
logging.info('Directory doesn\'t contain public.key trying to import')
17+
if pub_key is None:
18+
logging.error('Please specify public key for setup')
19+
sys.exit(1)
20+
21+
logging.debug('Trying to import key')
22+
23+
public_import_result = gpg.import_keys(pub_key)
24+
public_import_result.ok_reason
25+
26+
logging.debug(public_import_result)
27+
28+
if public_import_result.count != 1:
29+
logging.error('Invalid public key provided, please provide 1 valid key')
30+
sys.exit(1)
31+
32+
with open(key_dir, 'w') as key_file:
33+
key_file.write(pub_key)
34+
35+
logging.info('Public key valid')
36+
37+
38+
def importPrivateKey(gpg, sign_key):
39+
logging.info('Importing private key')
40+
41+
private_import_result = gpg.import_keys(sign_key)
42+
43+
if private_import_result.count != 1:
44+
logging.error('Invalid private key provided, please provide 1 valid key')
45+
sys.exit(1)
46+
47+
logging.debug(private_import_result)
48+
49+
if not any(data['ok'] >= '16' for data in private_import_result.results):
50+
logging.error('Key provided is not a secret key')
51+
sys.exit(1)
52+
53+
private_key_id = private_import_result.results[0]['fingerprint']
54+
55+
logging.info('Private key valid')
56+
57+
logging.debug('Key id: {}'.format(private_key_id))
58+
59+
logging.info('-- Done importing key --')
60+
61+
return private_key_id

0 commit comments

Comments
 (0)