hss 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9dd6fe9513ef938a661f864f1b666180fca1900c
4
- data.tar.gz: b8893ba888ce0d6ffb96259ba02e8d41f8d144aa
2
+ SHA256:
3
+ metadata.gz: ea38be50183638d064b68bb7869612eefe61aae3955b3bf74687178a1299788a
4
+ data.tar.gz: e3fcb36de03c7832e05fee113b21eebaa403a5d2e01aa2b4ce6152617185dccd
5
5
  SHA512:
6
- metadata.gz: 0ccd01d5f12c20afe8e6c045d001d74f7f0b0918c510a24eff46c6300a990a040873b33edc7784f0de161d42626e195ba7d925c891207299b098b929283eb23a
7
- data.tar.gz: f8c42d417a64b5374feaab330d913580e29fae8ac484999f9446f0da86d0e2991c0efd1e304dfca914cd17210fc2fc153372adc6398792a0e1f79ae99f60c6a7
6
+ metadata.gz: '08f83fa733d1699a22ece2b98490b3d5c60b946b851dd86050d26d8fa3d42dddcb778065a23a971f4e6639f2566519d6ac6985c878628fb8de86c852343c3d8c'
7
+ data.tar.gz: 767ab68f6cef6e5b200e8ac97401416557ea946728abae8414314cbcd87d19b93c91f78ca39fe996b871e90b9e97c0dca68af5d5be1928a75e8c17eeec90f786
@@ -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
@@ -1,7 +1,2 @@
1
- AllCops:
2
- Exclude:
3
- - spec/test/bad_helpers/module.rb
4
- Encoding:
5
- Enabled: false
6
- HashSyntax:
7
- Enabled: false
1
+ inherit_gem:
2
+ goodcop: .rubocop.yml
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 1.1.0 / 2023-08-08
2
+
3
+ * [BUGFIX] Support ';' as an HSS_CONFIG delimiter on all platforms, and do not use ':' on Windows, to support the presence of ':' in Windows paths
4
+
1
5
  # 1.0.1 / 2015-05-15
2
6
 
3
7
  * [FEATURE] Support HSS_COMMAND for changing base command
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014 Les Aker
3
+ Copyright (c) 2022 Les Aker
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,10 +2,7 @@ hss
2
2
  =========
3
3
 
4
4
  [![Gem Version](https://img.shields.io/gem/v/hss.svg)](https://rubygems.org/gems/hss)
5
- [![Dependency Status](https://img.shields.io/gemnasium/akerl/hss.svg)](https://gemnasium.com/akerl/hss)
6
- [![Code Climate](https://img.shields.io/codeclimate/github/akerl/hss.svg)](https://codeclimate.com/github/akerl/hss)
7
- [![Coverage Status](https://img.shields.io/coveralls/akerl/hss.svg)](https://coveralls.io/r/akerl/hss)
8
- [![Build Status](https://img.shields.io/travis/akerl/hss.svg)](https://travis-ci.org/akerl/hss)
5
+ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/akerl/hss/build.yml?branch=main)](https://github.com/akerl/hss/actions)
9
6
  [![MIT Licensed](https://img.shields.io/badge/license-MIT-green.svg)](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
@@ -11,4 +11,4 @@ RuboCop::RakeTask.new(:rubocop) do |task|
11
11
  task.fail_on_error = true
12
12
  end
13
13
 
14
- task :default => [:spec, :rubocop, :build, :install]
14
+ task default: %i[spec rubocop build install]
data/bin/hss CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'hss'
4
4
 
5
- My_Handler = HSS::Handler.new(:config => ENV['HSS_CONFIG'])
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('') { |a, e| a + " '" + e.gsub(/([$"])/, '\1') + "'" }
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
- $:.unshift File.expand_path('../lib/', __FILE__)
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.date = Time.now.strftime("%Y-%m-%d")
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 'rubocop', '~> 0.31.0'
20
- s.add_development_dependency 'rake', '~> 10.4.0'
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
@@ -8,7 +8,7 @@ module HSS
8
8
 
9
9
  def command(input)
10
10
  result = IO.popen(input) { |cmd| cmd.read.chomp }
11
- fail "Command failed: #{input}" unless $CHILD_STATUS == 0
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}"
@@ -8,7 +8,7 @@ module HSS
8
8
  @config['expansions'].each do |long, shorts|
9
9
  return long if shorts.include? input
10
10
  end
11
- fail NameError, "No expansion found for: #{input}"
11
+ raise NameError, "No expansion found for: #{input}"
12
12
  end
13
13
  end
14
14
  end
@@ -7,16 +7,12 @@ module HSS
7
7
  private
8
8
 
9
9
  def external(source, key)
10
- begin
11
- config = open(File.expand_path(source)) { |f| YAML.load f.read }
12
- rescue Psych::SyntaxError, Errno::ENOENT
13
- raise "Failed to open YAML file: #{source}"
14
- end
15
- begin
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
@@ -5,9 +5,19 @@ module HSS
5
5
  private
6
6
 
7
7
  def shortcut(input)
8
- @config['shortcuts'][input] || fail
9
- rescue
10
- raise NameError, "Shortcut does not exist #{input}"
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
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # Define the version
3
5
  module HSS
4
- VERSION = '1.0.1'
6
+ VERSION = '1.1.0'
5
7
  end
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 = '~/.hss.yml'
9
- DEFAULT_LIB = Pathname.new(__FILE__).realpath.split[0].to_s + '/hss/helpers'
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 = { :config => params } if params.is_a? String
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
- fail NameError, "Couldn't find a matching host for: #{input}"
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(':').map { |x| YAML.load File.read x }
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') || fail
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 + '/*').each do |helper|
67
- begin
68
- require helper
69
- @helpers << helper
70
- rescue LoadError, SyntaxError
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 # rubocop:disable UselessAssignment
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 '%Q{' + long_form + '}', @match_data # rubocop:disable 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
- if oldval.is_a? Hash
119
+ case oldval
120
+ when Hash
117
121
  deep_merge oldval, newval
118
- elsif oldval.is_a? Array
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
- 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
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 'cmd_bar').to eql 'bar@example.org'
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 'def_77').to eql 'chose_77'
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 'def_').to eql 'chose_10'
12
+ expect(handler.handle('def_')).to eql 'chose_10'
13
13
  end
14
14
  end
15
15
  end
@@ -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 'exp_a').to eql 'exp_alpha'
10
- expect(handler.handle 'exp_2').to eql 'exp_beta'
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 'ext_test.first.color').to eql 'external_blue'
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 'short_a').to eql 'short_ALPHA'
10
- expect(handler.handle 'short_b').to eql 'short_BETA'
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 'g').to eql 'git@github.com'
80
+ expect(handler.handle('g')).to eql 'git@github.com'
81
81
  end
82
82
  it 'supports regex capturing' do
83
- expect(handler.handle 'cap99').to eql 'server99.example.org'
83
+ expect(handler.handle('cap99')).to eql 'server99.example.org'
84
84
  end
85
85
  it 'supports named captures' do
86
- expect(handler.handle 'name_a').to eql 'name_ALPHA'
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 'bar__1_b').to eql 'bar_9_alpha_BETA'
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 'nest_a').to eql 'winner'
95
+ expect(handler.handle('nest_a')).to eql 'winner'
96
96
  end
97
97
  it 'supports deep nested operations' do
98
- expect(handler.handle 'deep_cat_c').to eql 'CHARLIE'
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
@@ -1,10 +1,2 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
- SimpleCov.start do
6
- add_filter '/spec/'
7
- end
8
-
9
1
  require 'rspec'
10
2
  require 'hss'
@@ -1,7 +1,9 @@
1
1
  ##
2
2
  # Provides a helper to have default values
3
- class HSS::Parser
4
- def default(a, b)
5
- a.nil? || a.empty? ? b : a
3
+ module HSS
4
+ class Parser
5
+ def default(a, b)
6
+ a.nil? || a.empty? ? b : a
7
+ end
6
8
  end
7
9
  end
@@ -1,7 +1,9 @@
1
1
  ##
2
2
  # Allow shortcut expansion from the config
3
- class HSS::Parser
4
- def shortcut(input)
5
- @config['shortcuts'][input]
3
+ module HSS
4
+ class Parser
5
+ def shortcut(input)
6
+ @config['shortcuts'][input]
7
+ end
6
8
  end
7
9
  end
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.1
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: 2015-05-16 00:00:00.000000000 Z
11
+ date: 2023-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rubocop
14
+ name: goodcop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.31.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.31.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: '0'
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
- rubyforge_project:
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}"