Update gpg publish
to work with mirror arguments (#28740)
This commit updates the `gpg publish` command to work with the mirror arguments, when trying to push keys to a mirror. - [x] update `gpg publish command - [x] add test for publishing GPG keys and rebuilding the key index within a mirror
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import spack.binary_distribution
|
import spack.binary_distribution
|
||||||
import spack.cmd.common.arguments as arguments
|
import spack.cmd.common.arguments as arguments
|
||||||
|
import spack.mirror
|
||||||
import spack.paths
|
import spack.paths
|
||||||
import spack.util.gpg
|
import spack.util.gpg
|
||||||
|
|
||||||
@@ -200,8 +201,13 @@ def gpg_verify(args):
|
|||||||
def gpg_publish(args):
|
def gpg_publish(args):
|
||||||
"""publish public keys to a build cache"""
|
"""publish public keys to a build cache"""
|
||||||
|
|
||||||
# TODO(opadron): switch to using the mirror args once #17547 is merged
|
mirror = None
|
||||||
mirror = args.directory
|
if args.directory:
|
||||||
|
mirror = spack.mirror.Mirror(args.directory, args.directory)
|
||||||
|
elif args.mirror_name:
|
||||||
|
mirror = spack.mirror.MirrorCollection().lookup(args.mirror_name)
|
||||||
|
elif args.mirror_url:
|
||||||
|
mirror = spack.mirror.Mirror(args.mirror_url, args.mirror_url)
|
||||||
|
|
||||||
spack.binary_distribution.push_keys(
|
spack.binary_distribution.push_keys(
|
||||||
mirror, keys=args.keys, regenerate_index=args.rebuild_index)
|
mirror, keys=args.keys, regenerate_index=args.rebuild_index)
|
||||||
|
@@ -20,11 +20,31 @@
|
|||||||
#: spack command used by tests below
|
#: spack command used by tests below
|
||||||
gpg = SpackCommand('gpg')
|
gpg = SpackCommand('gpg')
|
||||||
bootstrap = SpackCommand('bootstrap')
|
bootstrap = SpackCommand('bootstrap')
|
||||||
|
mirror = SpackCommand('mirror')
|
||||||
|
|
||||||
pytestmark = pytest.mark.skipif(sys.platform == "win32",
|
pytestmark = pytest.mark.skipif(sys.platform == "win32",
|
||||||
reason="does not run on windows")
|
reason="does not run on windows")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def tmp_scope():
|
||||||
|
"""Creates a temporary configuration scope"""
|
||||||
|
|
||||||
|
base_name = 'internal-testing-scope'
|
||||||
|
current_overrides = set(
|
||||||
|
x.name for x in
|
||||||
|
spack.config.config.matching_scopes(r'^{0}'.format(base_name)))
|
||||||
|
|
||||||
|
num_overrides = 0
|
||||||
|
scope_name = base_name
|
||||||
|
while scope_name in current_overrides:
|
||||||
|
scope_name = '{0}{1}'.format(base_name, num_overrides)
|
||||||
|
num_overrides += 1
|
||||||
|
|
||||||
|
with spack.config.override(spack.config.InternalConfigScope(scope_name)):
|
||||||
|
yield scope_name
|
||||||
|
|
||||||
|
|
||||||
# test gpg command detection
|
# test gpg command detection
|
||||||
@pytest.mark.parametrize('cmd_name,version', [
|
@pytest.mark.parametrize('cmd_name,version', [
|
||||||
('gpg', 'undetectable'), # undetectable version
|
('gpg', 'undetectable'), # undetectable version
|
||||||
@@ -60,7 +80,7 @@ def test_no_gpg_in_path(tmpdir, mock_gnupghome, monkeypatch, mutable_config):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.maybeslow
|
@pytest.mark.maybeslow
|
||||||
def test_gpg(tmpdir, mock_gnupghome):
|
def test_gpg(tmpdir, tmp_scope, mock_gnupghome):
|
||||||
# Verify a file with an empty keyring.
|
# Verify a file with an empty keyring.
|
||||||
with pytest.raises(ProcessError):
|
with pytest.raises(ProcessError):
|
||||||
gpg('verify', os.path.join(mock_gpg_data_path, 'content.txt'))
|
gpg('verify', os.path.join(mock_gpg_data_path, 'content.txt'))
|
||||||
@@ -172,3 +192,24 @@ def test_gpg(tmpdir, mock_gnupghome):
|
|||||||
|
|
||||||
# Verification should now succeed again.
|
# Verification should now succeed again.
|
||||||
gpg('verify', str(test_path))
|
gpg('verify', str(test_path))
|
||||||
|
|
||||||
|
# Publish the keys using a directory path
|
||||||
|
test_path = tmpdir.join('dir_cache')
|
||||||
|
os.makedirs('%s' % test_path)
|
||||||
|
gpg('publish', '--rebuild-index', '-d', str(test_path))
|
||||||
|
assert os.path.exists('%s/build_cache/_pgp/index.json' % test_path)
|
||||||
|
|
||||||
|
# Publish the keys using a mirror url
|
||||||
|
test_path = tmpdir.join('url_cache')
|
||||||
|
os.makedirs('%s' % test_path)
|
||||||
|
test_url = 'file://%s' % test_path
|
||||||
|
gpg('publish', '--rebuild-index', '--mirror-url', test_url)
|
||||||
|
assert os.path.exists('%s/build_cache/_pgp/index.json' % test_path)
|
||||||
|
|
||||||
|
# Publish the keys using a mirror name
|
||||||
|
test_path = tmpdir.join('named_cache')
|
||||||
|
os.makedirs('%s' % test_path)
|
||||||
|
mirror_url = 'file://%s' % test_path
|
||||||
|
mirror('add', '--scope', tmp_scope, 'gpg', mirror_url)
|
||||||
|
gpg('publish', '--rebuild-index', '-m', 'gpg')
|
||||||
|
assert os.path.exists('%s/build_cache/_pgp/index.json' % test_path)
|
||||||
|
Reference in New Issue
Block a user