mirror of
https://github.com/inspec/inspec
synced 2024-11-26 22:50:36 +00:00
add bitbucket repo url handling (#1866)
* add bitbucket repo url handling Signed-off-by: Mike Stevenson <Mike.Stevenson@us.logicalis.com> * backout changes to .gitignore * adding unit tests for bitbucket url transformers Signed-off-by: Mike Stevenson <Mike.Stevenson@us.logicalis.com> * fixing some indents Signed-off-by: Mike Stevenson <Mike.Stevenson@us.logicalis.com> * fix some indents Signed-off-by: Mike Stevenson <Mike.Stevenson@us.logicalis.com>
This commit is contained in:
parent
87b3c1ad40
commit
ba0a1ea7a7
2 changed files with 52 additions and 4 deletions
|
@ -37,8 +37,8 @@ module Fetchers
|
|||
nil
|
||||
end
|
||||
|
||||
# Transforms a browser github url to github tar url
|
||||
# We distinguish between three different Github URL types:
|
||||
# Transforms a browser github/bitbucket url to github/bitbucket tar url
|
||||
# We distinguish between three different Github/Bitbucket URL types:
|
||||
# - Master URL
|
||||
# - Branch URL
|
||||
# - Commit URL
|
||||
|
@ -46,22 +46,39 @@ module Fetchers
|
|||
# master url:
|
||||
# https://github.com/nathenharvey/tmp_compliance_profile/ is transformed to
|
||||
# https://github.com/nathenharvey/tmp_compliance_profile/archive/master.tar.gz
|
||||
# https://bitbucket.org/username/repo is transformed to
|
||||
# https://bitbucket.org/username/repo/get/master.tar.gz
|
||||
#
|
||||
# github branch:
|
||||
# branch:
|
||||
# https://github.com/hardening-io/tests-os-hardening/tree/2.0 is transformed to
|
||||
# https://github.com/hardening-io/tests-os-hardening/archive/2.0.tar.gz
|
||||
# https://bitbucket.org/username/repo/branch/branchname is transformed to
|
||||
# https://bitbucket.org/username/repo/get/newbranch.tar.gz
|
||||
#
|
||||
# github commit:
|
||||
# commit:
|
||||
# https://github.com/hardening-io/tests-os-hardening/tree/48bd4388ddffde68badd83aefa654e7af3231876
|
||||
# is transformed to
|
||||
# https://github.com/hardening-io/tests-os-hardening/archive/48bd4388ddffde68badd83aefa654e7af3231876.tar.gz
|
||||
# https://bitbucket.org/username/repo/commits/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc is transformed to
|
||||
# https://bitbucket.org/username/repo/get/95ce1f83d5bbe9eec34c5973f6894617e8d6d8cc.tar.gz
|
||||
|
||||
GITHUB_URL_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}
|
||||
GITHUB_URL_WITH_TREE_REGEX = %r{^https?://(www\.)?github\.com/(?<user>[\w-]+)/(?<repo>[\w-]+)/tree/(?<commit>[\w\.]+)(/)?$}
|
||||
BITBUCKET_URL_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)(\.git)?(/)?$}
|
||||
BITBUCKET_URL_BRANCH_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/branch/(?<branch>[\w\.]+)(/)?$}
|
||||
BITBUCKET_URL_COMMIT_REGEX = %r{^https?://(www\.)?bitbucket\.org/(?<user>[\w-]+)/(?<repo>[\w-]+)/commits/(?<commit>[\w\.]+)(/)?$}
|
||||
|
||||
def self.transform(target)
|
||||
transformed_target = if m = GITHUB_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
||||
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/master.tar.gz"
|
||||
elsif m = GITHUB_URL_WITH_TREE_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
||||
"https://github.com/#{m[:user]}/#{m[:repo]}/archive/#{m[:commit]}.tar.gz"
|
||||
elsif m = BITBUCKET_URL_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
||||
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/master.tar.gz"
|
||||
elsif m = BITBUCKET_URL_BRANCH_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
||||
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{m[:branch]}.tar.gz"
|
||||
elsif m = BITBUCKET_URL_COMMIT_REGEX.match(target) # rubocop:disable Lint/AssignmentInCondition
|
||||
"https://bitbucket.org/#{m[:user]}/#{m[:repo]}/get/#{m[:commit]}.tar.gz"
|
||||
end
|
||||
|
||||
if transformed_target
|
||||
|
|
|
@ -88,6 +88,37 @@ describe Fetchers::Url do
|
|||
_(res.resolved_source).must_equal({url: 'https://github.com/hardening-io/tests-os-hardening/archive/48bd4388ddffde68badd83aefa654e7af3231876.tar.gz',
|
||||
sha256: expected_shasum})
|
||||
end
|
||||
|
||||
%w{https://bitbucket.org/chef/inspec
|
||||
https://bitbucket.org/chef/inspec.git
|
||||
https://www.bitbucket.org/chef/inspec.git
|
||||
http://bitbucket.org/chef/inspec
|
||||
http://bitbucket.org/chef/inspec.git
|
||||
http://www.bitbucket.org/chef/inspec.git}.each do |bitbucket|
|
||||
it "resolves a bitbucket url #{bitbucket}" do
|
||||
res = fetcher.resolve(bitbucket)
|
||||
res.expects(:open).returns(mock_open)
|
||||
_(res).wont_be_nil
|
||||
_(res.resolved_source).must_equal({url: 'https://bitbucket.org/chef/inspec/get/master.tar.gz', sha256: expected_shasum})
|
||||
end
|
||||
end
|
||||
|
||||
it "resolves a bitbucket branch url" do
|
||||
bitbucket = 'https://bitbucket.org/chef/inspec/branch/newbranch'
|
||||
res = fetcher.resolve(bitbucket)
|
||||
res.expects(:open).returns(mock_open)
|
||||
_(res).wont_be_nil
|
||||
_(res.resolved_source).must_equal({url: 'https://bitbucket.org/chef/inspec/get/newbranch.tar.gz', sha256: expected_shasum})
|
||||
end
|
||||
|
||||
it "resolves a bitbucket commit url" do
|
||||
bitbucket = 'https://bitbucket.org/chef/inspec/commits/48bd4388ddffde68badd83aefa654e7af3231876'
|
||||
res = fetcher.resolve(bitbucket)
|
||||
res.expects(:open).returns(mock_open)
|
||||
_(res).wont_be_nil
|
||||
_(res.resolved_source).must_equal({url: 'https://bitbucket.org/chef/inspec/get/48bd4388ddffde68badd83aefa654e7af3231876.tar.gz', sha256: expected_shasum})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe 'applied to a valid url (mocked tar.gz)' do
|
||||
|
|
Loading…
Reference in a new issue