hss 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/exporter.sh +16 -0
- data/.github/workflows/build.yml +37 -0
- data/.rubocop.yml +2 -7
- data/CHANGELOG.md +4 -0
- data/LICENSE +1 -1
- data/README.md +2 -5
- data/Rakefile +1 -1
- data/bin/hss +4 -2
- data/hss.gemspec +5 -8
- data/lib/hss/helpers/command.rb +1 -1
- data/lib/hss/helpers/expand.rb +1 -1
- data/lib/hss/helpers/external.rb +6 -10
- data/lib/hss/helpers/shortcut.rb +13 -3
- data/lib/hss/version.rb +3 -1
- data/lib/hss.rb +21 -17
- data/spec/bin_spec.rb +7 -7
- data/spec/helpers/command_spec.rb +1 -1
- data/spec/helpers/default_spec.rb +2 -2
- data/spec/helpers/expand_spec.rb +2 -2
- data/spec/helpers/external_spec.rb +1 -1
- data/spec/helpers/shortcut_spec.rb +2 -2
- data/spec/hss_spec.rb +8 -6
- data/spec/spec_helper.rb +0 -8
- data/spec/test/good_helpers/default.rb +5 -3
- data/spec/test/good_helpers/shortcut.rb +5 -3
- metadata +12 -83
- data/.travis.yml +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ea38be50183638d064b68bb7869612eefe61aae3955b3bf74687178a1299788a
|
4
|
+
data.tar.gz: e3fcb36de03c7832e05fee113b21eebaa403a5d2e01aa2b4ce6152617185dccd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08f83fa733d1699a22ece2b98490b3d5c60b946b851dd86050d26d8fa3d42dddcb778065a23a971f4e6639f2566519d6ac6985c878628fb8de86c852343c3d8c'
|
7
|
+
data.tar.gz: 767ab68f6cef6e5b200e8ac97401416557ea946728abae8414314cbcd87d19b93c91f78ca39fe996b871e90b9e97c0dca68af5d5be1928a75e8c17eeec90f786
|
data/.github/exporter.sh
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -euo pipefail
|
4
|
+
|
5
|
+
URL="https://exporter.akerl.app/metric"
|
6
|
+
AUTH="Authorization: Bearer $EXPORTER_TOKEN"
|
7
|
+
if [[ "$JOB_STATUS" == "success" ]] ; then
|
8
|
+
VALUE=1
|
9
|
+
else
|
10
|
+
VALUE=0
|
11
|
+
fi
|
12
|
+
BODY="{\"name\":\"gh/${GITHUB_REPOSITORY}\",\"metrics\":[{\"name\":\"ghactions\",\"type\":\"gauge\",\"tags\":{\"repo\":\"${GITHUB_REPOSITORY}\"},\"value\":\"${VALUE}\"}]}"
|
13
|
+
|
14
|
+
echo "$BODY"
|
15
|
+
|
16
|
+
curl -i -XPOST -d "$BODY" -H"$AUTH" "$URL"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
name: Build
|
3
|
+
'on':
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
tags:
|
8
|
+
- "**"
|
9
|
+
pull_request_target:
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
name: Build
|
13
|
+
runs-on: ubuntu-22.04
|
14
|
+
permissions:
|
15
|
+
contents: write
|
16
|
+
steps:
|
17
|
+
- name: Checkout
|
18
|
+
uses: actions/checkout@v3
|
19
|
+
with:
|
20
|
+
submodules: recursive
|
21
|
+
- uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: '3.1'
|
24
|
+
bundler-cache: true
|
25
|
+
- name: Build
|
26
|
+
run: bundle exec rake
|
27
|
+
- name: Release
|
28
|
+
if: github.ref_type == 'tag'
|
29
|
+
run: bundle exec rake release
|
30
|
+
env:
|
31
|
+
GEM_HOST_API_KEY: "${{ secrets.GEM_HOST_API_KEY }}"
|
32
|
+
- name: Post to hook-exporter
|
33
|
+
run: "./.github/exporter.sh"
|
34
|
+
env:
|
35
|
+
EXPORTER_TOKEN: "${{ secrets.EXPORTER_TOKEN }}"
|
36
|
+
JOB_STATUS: "${{ job.status }}"
|
37
|
+
if: always() && github.ref == 'refs/heads/main'
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -2,10 +2,7 @@ hss
|
|
2
2
|
=========
|
3
3
|
|
4
4
|
[](https://rubygems.org/gems/hss)
|
5
|
-
[](https://codeclimate.com/github/akerl/hss)
|
7
|
-
[](https://coveralls.io/r/akerl/hss)
|
8
|
-
[](https://travis-ci.org/akerl/hss)
|
5
|
+
[](https://github.com/akerl/hss/actions)
|
9
6
|
[](https://tldrlegal.com/license/mit-license)
|
10
7
|
|
11
8
|
SSH helper that uses regex and fancy expansion to dynamically manage SSH shortcuts
|
@@ -42,7 +39,7 @@ alias cnysr='rsync -e hss'
|
|
42
39
|
|
43
40
|
## Configuration
|
44
41
|
|
45
|
-
1. You can put your configuration in ~/.hss.yml or another file specified by the "HSS\_CONFIG" environment variable.
|
42
|
+
1. You can put your configuration in ~/.hss.yml or another file specified by the "HSS\_CONFIG" environment variable. You can refer to multiple config files in "HSS\_CONFIG" by separating them with colons and the configs will be merged (HSS\_CONFIG=$HOME/.hss-shared.yml:$HOME/.hss-mine.yml).
|
46
43
|
2. The only required configuration section is "patterns", which contains an array of hashes with the following attributes:
|
47
44
|
* note: Name of this pattern ("my servers")
|
48
45
|
* example: Shows how this is used ("jimbo -> root@jimbo.example.org")
|
data/Rakefile
CHANGED
data/bin/hss
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'hss'
|
4
4
|
|
5
|
-
My_Handler = HSS::Handler.new(:
|
5
|
+
My_Handler = HSS::Handler.new(config: ENV.fetch('HSS_CONFIG', nil))
|
6
6
|
|
7
7
|
if ARGV == ['version']
|
8
8
|
puts HSS::VERSION
|
@@ -15,7 +15,9 @@ elsif ARGV == ['help'] || ARGV.empty?
|
|
15
15
|
end
|
16
16
|
|
17
17
|
short_host = ARGV.delete_at(ARGV.find_index { |x| x[0, 1] != '-' } || 0)
|
18
|
-
args = ARGV.reduce('')
|
18
|
+
args = ARGV.reduce('') do |acc, elem|
|
19
|
+
"#{acc} '#{elem.gsub(/([$"])/, '\1')}'"
|
20
|
+
end
|
19
21
|
command = ENV['HSS_COMMAND'] || 'ssh'
|
20
22
|
command.prepend('echo ') if ENV['HSS_DEBUG']
|
21
23
|
|
data/hss.gemspec
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
2
2
|
require 'hss/version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'hss'
|
6
6
|
s.version = HSS::VERSION
|
7
|
-
s.
|
7
|
+
s.required_ruby_version = '>= 2.6'
|
8
|
+
|
8
9
|
s.summary = 'SSH helper'
|
9
10
|
s.description = 'Regex-based SSH shortcut tool'
|
10
11
|
s.authors = ['Les Aker']
|
@@ -13,12 +14,8 @@ Gem::Specification.new do |s|
|
|
13
14
|
s.license = 'MIT'
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split
|
16
|
-
s.test_files = `git ls-files spec/*`.split
|
17
17
|
s.executables = ['hss']
|
18
18
|
|
19
|
-
s.add_development_dependency '
|
20
|
-
s.
|
21
|
-
s.add_development_dependency 'coveralls', '~> 0.8.0'
|
22
|
-
s.add_development_dependency 'rspec', '~> 3.2.0'
|
23
|
-
s.add_development_dependency 'fuubar', '~> 2.0.0'
|
19
|
+
s.add_development_dependency 'goodcop', '~> 0.9.7'
|
20
|
+
s.metadata['rubygems_mfa_required'] = 'true'
|
24
21
|
end
|
data/lib/hss/helpers/command.rb
CHANGED
@@ -8,7 +8,7 @@ module HSS
|
|
8
8
|
|
9
9
|
def command(input)
|
10
10
|
result = IO.popen(input) { |cmd| cmd.read.chomp }
|
11
|
-
|
11
|
+
raise("Command failed: #{input}") unless $CHILD_STATUS.exitstatus.zero?
|
12
12
|
result
|
13
13
|
rescue Errno::ENOENT
|
14
14
|
raise "Command not found: #{input}"
|
data/lib/hss/helpers/expand.rb
CHANGED
data/lib/hss/helpers/external.rb
CHANGED
@@ -7,16 +7,12 @@ module HSS
|
|
7
7
|
private
|
8
8
|
|
9
9
|
def external(source, key)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
key.split('.').reduce(config) { |a, e| a[e] } || fail
|
17
|
-
rescue
|
18
|
-
raise NameError, "Key not found in YAML: #{key}"
|
19
|
-
end
|
10
|
+
config = File.open(File.expand_path(source)) { |f| YAML.safe_load f.read }
|
11
|
+
key.split('.').reduce(config) { |acc, elem| acc[elem] } || raise
|
12
|
+
rescue Psych::SyntaxError, Errno::ENOENT
|
13
|
+
raise "Failed to open YAML file: #{source}"
|
14
|
+
rescue StandardError
|
15
|
+
raise NameError, "Key not found in YAML: #{key}"
|
20
16
|
end
|
21
17
|
end
|
22
18
|
end
|
data/lib/hss/helpers/shortcut.rb
CHANGED
@@ -5,9 +5,19 @@ module HSS
|
|
5
5
|
private
|
6
6
|
|
7
7
|
def shortcut(input)
|
8
|
-
@config
|
9
|
-
|
10
|
-
|
8
|
+
@config.dig('shortcuts', input) || raise(NameError, "Shortcut does not exist #{input}")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
unless {}.respond_to? :dig
|
14
|
+
##
|
15
|
+
# Define dig method if it didn't exist (because Ruby predates 2.3)
|
16
|
+
class Hash
|
17
|
+
def dig(arg, *args)
|
18
|
+
val = self[arg]
|
19
|
+
return val if val.nil? || args.empty?
|
20
|
+
val.dig(*args)
|
11
21
|
end
|
12
22
|
end
|
13
23
|
end
|
data/lib/hss/version.rb
CHANGED
data/lib/hss.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'yaml'
|
2
4
|
require 'pathname'
|
3
5
|
require 'hss/version'
|
@@ -5,8 +7,9 @@ require 'hss/version'
|
|
5
7
|
##
|
6
8
|
# HSS module provides a helper for SSH shortcuts
|
7
9
|
module HSS
|
8
|
-
DEFAULT_CONFIG = '
|
9
|
-
DEFAULT_LIB = Pathname.new(__FILE__).realpath.split[0]
|
10
|
+
DEFAULT_CONFIG = File.join(Dir.home, '.hss.yml')
|
11
|
+
DEFAULT_LIB = File.join(Pathname.new(__FILE__).realpath.split[0], 'hss', 'helpers')
|
12
|
+
CONFIG_DELIMITERS = /cygwin|mswin|mingw|bccwin|wince|emx/.match?(RUBY_PLATFORM) ? ';' : /[:;]/
|
10
13
|
|
11
14
|
class << self
|
12
15
|
##
|
@@ -25,7 +28,7 @@ module HSS
|
|
25
28
|
## Make a new handler with a config and parser
|
26
29
|
|
27
30
|
def initialize(params = {})
|
28
|
-
params = { :
|
31
|
+
params = { config: params } if params.is_a? String
|
29
32
|
load_config(params[:config])
|
30
33
|
@helpers = []
|
31
34
|
load_helpers(params[:helpers])
|
@@ -40,7 +43,7 @@ module HSS
|
|
40
43
|
next unless @parser.check(input, pattern['short'])
|
41
44
|
return @parser.parse(pattern['long'])
|
42
45
|
end
|
43
|
-
|
46
|
+
raise NameError, "Couldn't find a matching host for: #{input}"
|
44
47
|
end
|
45
48
|
|
46
49
|
private
|
@@ -50,12 +53,14 @@ module HSS
|
|
50
53
|
|
51
54
|
def load_config(config_path = nil)
|
52
55
|
path = File.expand_path(config_path || HSS::DEFAULT_CONFIG)
|
53
|
-
files = path.split(
|
56
|
+
files = path.split(CONFIG_DELIMITERS).map { |x| YAML.safe_load File.read x }
|
54
57
|
@config = files.reverse.reduce(&:deep_merge)
|
55
|
-
@patterns = @config.delete('patterns') ||
|
58
|
+
@patterns = @config.delete('patterns') || raise
|
59
|
+
# rubocop:disable Lint/ShadowedException
|
56
60
|
rescue Psych::SyntaxError, RuntimeError, Errno::ENOENT
|
57
61
|
raise "Failed to load config: #{config_path}"
|
58
62
|
end
|
63
|
+
# rubocop:enable Lint/ShadowedException
|
59
64
|
|
60
65
|
##
|
61
66
|
# Load helper modules
|
@@ -63,13 +68,11 @@ module HSS
|
|
63
68
|
def load_helpers(helper_path = nil)
|
64
69
|
helper_path ||= HSS::DEFAULT_LIB
|
65
70
|
helper_path = File.expand_path(helper_path)
|
66
|
-
Dir.glob(helper_path
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
raise LoadError, "Failed to load helper: #{helper}"
|
72
|
-
end
|
71
|
+
Dir.glob(File.join(helper_path, '*')).sort.each do |helper|
|
72
|
+
require helper
|
73
|
+
@helpers << helper
|
74
|
+
rescue LoadError, SyntaxError
|
75
|
+
raise LoadError, "Failed to load helper: #{helper}"
|
73
76
|
end
|
74
77
|
end
|
75
78
|
end
|
@@ -90,7 +93,7 @@ module HSS
|
|
90
93
|
|
91
94
|
def check(input, short_form)
|
92
95
|
return false unless input.match short_form
|
93
|
-
x = Regexp.last_match
|
96
|
+
x = Regexp.last_match
|
94
97
|
@match_data = binding
|
95
98
|
true
|
96
99
|
end
|
@@ -99,7 +102,7 @@ module HSS
|
|
99
102
|
# Evaluate the long_form using the stored context
|
100
103
|
|
101
104
|
def parse(long_form)
|
102
|
-
a = eval
|
105
|
+
a = eval "%Q{#{long_form}}", @match_data, __FILE__, __LINE__ # rubocop:disable Security/Eval
|
103
106
|
a == long_form ? a : parse(a)
|
104
107
|
end
|
105
108
|
end
|
@@ -113,9 +116,10 @@ class Hash
|
|
113
116
|
|
114
117
|
def deep_merge(new)
|
115
118
|
merge(new) do |_, oldval, newval|
|
116
|
-
|
119
|
+
case oldval
|
120
|
+
when Hash
|
117
121
|
deep_merge oldval, newval
|
118
|
-
|
122
|
+
when Array
|
119
123
|
oldval + newval
|
120
124
|
else
|
121
125
|
newval
|
data/spec/bin_spec.rb
CHANGED
@@ -21,11 +21,11 @@ describe 'HSS script' do
|
|
21
21
|
expect(`hss g`.strip).to eql 'git@github.com'
|
22
22
|
ENV.delete 'HSS_COMMAND'
|
23
23
|
end
|
24
|
-
it 'connects via SSH' do
|
25
|
-
|
26
|
-
end
|
27
|
-
it 'connects via SCP' do
|
28
|
-
|
29
|
-
|
30
|
-
end
|
24
|
+
# it 'connects via SSH' do
|
25
|
+
# expect(`hss l echo 'hello \\"world\\"'`.strip).to eql 'hello "world"'
|
26
|
+
# end
|
27
|
+
# it 'connects via SCP' do
|
28
|
+
# `scp -S hss spec/test/config.yml l:#{Dir.pwd}/scp_test`
|
29
|
+
# expect(File.exist?('scp_test')).to be_truthy
|
30
|
+
# end
|
31
31
|
end
|
@@ -6,7 +6,7 @@ describe HSS::Parser do
|
|
6
6
|
|
7
7
|
describe '#command' do
|
8
8
|
it 'runs shell commands' do
|
9
|
-
expect(handler.handle
|
9
|
+
expect(handler.handle('cmd_bar')).to eql 'bar@example.org'
|
10
10
|
end
|
11
11
|
context 'if the command is invalid' do
|
12
12
|
it 'raises an error' do
|
@@ -6,10 +6,10 @@ describe HSS::Parser do
|
|
6
6
|
|
7
7
|
describe '#default' do
|
8
8
|
it 'uses the provided value if set' do
|
9
|
-
expect(handler.handle
|
9
|
+
expect(handler.handle('def_77')).to eql 'chose_77'
|
10
10
|
end
|
11
11
|
it 'uses the default if the value is unset' do
|
12
|
-
expect(handler.handle
|
12
|
+
expect(handler.handle('def_')).to eql 'chose_10'
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/spec/helpers/expand_spec.rb
CHANGED
@@ -6,8 +6,8 @@ describe HSS::Parser do
|
|
6
6
|
|
7
7
|
describe '#expand' do
|
8
8
|
it 'matches keywords in a mapping' do
|
9
|
-
expect(handler.handle
|
10
|
-
expect(handler.handle
|
9
|
+
expect(handler.handle('exp_a')).to eql 'exp_alpha'
|
10
|
+
expect(handler.handle('exp_2')).to eql 'exp_beta'
|
11
11
|
end
|
12
12
|
context 'when no match is found' do
|
13
13
|
it 'raises an error' do
|
@@ -6,7 +6,7 @@ describe HSS::Parser do
|
|
6
6
|
|
7
7
|
describe '#external' do
|
8
8
|
it 'reads values from a YAML file' do
|
9
|
-
expect(handler.handle
|
9
|
+
expect(handler.handle('ext_test.first.color')).to eql 'external_blue'
|
10
10
|
end
|
11
11
|
context 'when a key is not found' do
|
12
12
|
it 'raises an error' do
|
@@ -6,8 +6,8 @@ describe HSS::Parser do
|
|
6
6
|
|
7
7
|
describe '#shortcut' do
|
8
8
|
it 'expands shortcut text' do
|
9
|
-
expect(handler.handle
|
10
|
-
expect(handler.handle
|
9
|
+
expect(handler.handle('short_a')).to eql 'short_ALPHA'
|
10
|
+
expect(handler.handle('short_b')).to eql 'short_BETA'
|
11
11
|
end
|
12
12
|
context 'when an invalid shortcut is used' do
|
13
13
|
it 'raises an error' do
|
data/spec/hss_spec.rb
CHANGED
@@ -77,30 +77,31 @@ describe HSS do
|
|
77
77
|
|
78
78
|
describe '#handle' do
|
79
79
|
it 'matches input to patterns' do
|
80
|
-
expect(handler.handle
|
80
|
+
expect(handler.handle('g')).to eql 'git@github.com'
|
81
81
|
end
|
82
82
|
it 'supports regex capturing' do
|
83
|
-
expect(handler.handle
|
83
|
+
expect(handler.handle('cap99')).to eql 'server99.example.org'
|
84
84
|
end
|
85
85
|
it 'supports named captures' do
|
86
|
-
expect(handler.handle
|
86
|
+
expect(handler.handle('name_a')).to eql 'name_ALPHA'
|
87
87
|
end
|
88
88
|
it 'raises an error if no match is found' do
|
89
89
|
expect { handler.handle 'x' }.to raise_exception NameError
|
90
90
|
end
|
91
91
|
it 'supports combination of helpers' do
|
92
|
-
expect(handler.handle
|
92
|
+
expect(handler.handle('bar__1_b')).to eql 'bar_9_alpha_BETA'
|
93
93
|
end
|
94
94
|
it 'supports shallow nested operations' do
|
95
|
-
expect(handler.handle
|
95
|
+
expect(handler.handle('nest_a')).to eql 'winner'
|
96
96
|
end
|
97
97
|
it 'supports deep nested operations' do
|
98
|
-
expect(handler.handle
|
98
|
+
expect(handler.handle('deep_cat_c')).to eql 'CHARLIE'
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe HSS::Parser do
|
104
|
+
# rubocop:disable Lint/InterpolationCheck
|
104
105
|
let(:parser) { HSS::Parser.new(key: 'value') }
|
105
106
|
|
106
107
|
describe '#initialize' do
|
@@ -126,5 +127,6 @@ describe HSS do
|
|
126
127
|
expect(parser.parse('#{$1}')).to eql 'winner'
|
127
128
|
end
|
128
129
|
end
|
130
|
+
# rubocop:enable Lint/InterpolationCheck
|
129
131
|
end
|
130
132
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,85 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: goodcop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.9.7
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 10.4.0
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 10.4.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: coveralls
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.8.0
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.8.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 3.2.0
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 3.2.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: fuubar
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 2.0.0
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 2.0.0
|
26
|
+
version: 0.9.7
|
83
27
|
description: Regex-based SSH shortcut tool
|
84
28
|
email: me@lesaker.org
|
85
29
|
executables:
|
@@ -87,10 +31,11 @@ executables:
|
|
87
31
|
extensions: []
|
88
32
|
extra_rdoc_files: []
|
89
33
|
files:
|
34
|
+
- ".github/exporter.sh"
|
35
|
+
- ".github/workflows/build.yml"
|
90
36
|
- ".gitignore"
|
91
37
|
- ".rspec"
|
92
38
|
- ".rubocop.yml"
|
93
|
-
- ".travis.yml"
|
94
39
|
- CHANGELOG.md
|
95
40
|
- Gemfile
|
96
41
|
- LICENSE
|
@@ -124,7 +69,8 @@ files:
|
|
124
69
|
homepage: https://github.com/akerl/hss
|
125
70
|
licenses:
|
126
71
|
- MIT
|
127
|
-
metadata:
|
72
|
+
metadata:
|
73
|
+
rubygems_mfa_required: 'true'
|
128
74
|
post_install_message:
|
129
75
|
rdoc_options: []
|
130
76
|
require_paths:
|
@@ -133,32 +79,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
79
|
requirements:
|
134
80
|
- - ">="
|
135
81
|
- !ruby/object:Gem::Version
|
136
|
-
version: '
|
82
|
+
version: '2.6'
|
137
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
84
|
requirements:
|
139
85
|
- - ">="
|
140
86
|
- !ruby/object:Gem::Version
|
141
87
|
version: '0'
|
142
88
|
requirements: []
|
143
|
-
|
144
|
-
rubygems_version: 2.4.5
|
89
|
+
rubygems_version: 3.3.26
|
145
90
|
signing_key:
|
146
91
|
specification_version: 4
|
147
92
|
summary: SSH helper
|
148
|
-
test_files:
|
149
|
-
- spec/bin_spec.rb
|
150
|
-
- spec/helpers/command_spec.rb
|
151
|
-
- spec/helpers/default_spec.rb
|
152
|
-
- spec/helpers/expand_spec.rb
|
153
|
-
- spec/helpers/external_spec.rb
|
154
|
-
- spec/helpers/shortcut_spec.rb
|
155
|
-
- spec/hss_spec.rb
|
156
|
-
- spec/spec_helper.rb
|
157
|
-
- spec/test/bad_helpers/module.rb
|
158
|
-
- spec/test/config.yml
|
159
|
-
- spec/test/external_test.yml
|
160
|
-
- spec/test/good_helpers/default.rb
|
161
|
-
- spec/test/good_helpers/shortcut.rb
|
162
|
-
- spec/test/incomplete.yml
|
163
|
-
- spec/test/invalid.yml
|
164
|
-
- spec/test/other.yml
|
93
|
+
test_files: []
|
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
before_script:
|
2
|
-
- ssh-keygen -N '' -C 'build-test' -f ~/.ssh/id_rsa
|
3
|
-
- cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
|
4
|
-
language: ruby
|
5
|
-
cache: bundler
|
6
|
-
sudo: false
|
7
|
-
rvm:
|
8
|
-
- 2.2.0
|
9
|
-
- 2.1.5
|
10
|
-
- 2.0.0-p598
|
11
|
-
- 1.9.3-p551
|
12
|
-
notifications:
|
13
|
-
email: false
|
14
|
-
irc:
|
15
|
-
channels:
|
16
|
-
- irc.oftc.net#akerl
|
17
|
-
template:
|
18
|
-
- "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"
|