Repository: buildr Updated Branches: refs/heads/master 749acfe1e -> 0ba77e344
BUILDR-572 Allow to upload unique version (timestamp based) snapshot artifacts to a repository. Submitted by Brice Figureau. Project: http://git-wip-us.apache.org/repos/asf/buildr/repo Commit: http://git-wip-us.apache.org/repos/asf/buildr/commit/0ba77e34 Tree: http://git-wip-us.apache.org/repos/asf/buildr/tree/0ba77e34 Diff: http://git-wip-us.apache.org/repos/asf/buildr/diff/0ba77e34 Branch: refs/heads/master Commit: 0ba77e344b99122dddc6e7062452c58effbb2d51 Parents: 749acfe Author: Antoine Toulme <[email protected]> Authored: Wed Aug 17 00:37:03 2016 -0700 Committer: Antoine Toulme <[email protected]> Committed: Wed Aug 17 00:37:03 2016 -0700 ---------------------------------------------------------------------- CHANGELOG | 1 + lib/buildr/packaging/artifact.rb | 39 ++++++++++++++++++++++++++++++++++- spec/packaging/artifact_spec.rb | 34 ++++++++++++++++++++++++++---- 3 files changed, 69 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/buildr/blob/0ba77e34/CHANGELOG ---------------------------------------------------------------------- diff --git a/CHANGELOG b/CHANGELOG index c4fed37..51786d0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -17,6 +17,7 @@ * Added: BUILDR-523 Issue a warning when Java.classpath is modified after Java.load has happened * Added: BUILDR-594 Added support for changing the verification mode of SSL certificates * Added: BUILDR-595 Added support to providing custom SSL certificates +* Added: BUILDR-572 Allow to upload unique version (timestamp based) snapshot artifacts to a repository. Submitted by Brice Figureau. * Fixed: BUILDR-207 remove 'Skipping tests' messages * Added: BUILDR-703 release: allow THIS_VERSION to be defined in another file * Fixed: BUILDR-674 Artifacts with bundle extension cannot be downloaded by Buildr http://git-wip-us.apache.org/repos/asf/buildr/blob/0ba77e34/lib/buildr/packaging/artifact.rb ---------------------------------------------------------------------- diff --git a/lib/buildr/packaging/artifact.rb b/lib/buildr/packaging/artifact.rb index 90c0197..97c5de3 100644 --- a/lib/buildr/packaging/artifact.rb +++ b/lib/buildr/packaging/artifact.rb @@ -35,6 +35,7 @@ module Buildr #:nodoc: module ActsAsArtifact ARTIFACT_ATTRIBUTES = [:group, :id, :type, :classifier, :version] + MAVEN_METADATA = "maven_metadata.xml" class << self private @@ -75,6 +76,11 @@ module Buildr #:nodoc: def snapshot? version =~ /-SNAPSHOT$/ end + + def final_version + return version unless snapshot? + Time.now.strftime("%Y%m%d.%H%M%S") + end # :call-seq: # to_spec_hash => Hash @@ -151,6 +157,27 @@ module Buildr #:nodoc: end end end + + # :call-seq: + # maven_metadata_xml => string + # + # Creates Maven Metadata XML content for this artifact. + def maven_metadata_xml + xml = Builder::XmlMarkup.new(:indent=>2) + xml.instruct! + xml.metadata do + xml.groupId group + xml.artifactId id + xml.version version + xml.versioning do + xml.snapshot do + xml.timestamp final_version + xml.buildNumber 1 + end + xml.lastupdated Time.now.strftime("%Y%m%d%H%M%S") + end + end + end def install invoke @@ -201,7 +228,7 @@ module Buildr #:nodoc: uri.user = upload_to[:username] if upload_to[:username] uri.password = upload_to[:password] if upload_to[:password] - path = group.gsub('.', '/') + "/#{id}/#{version}/#{File.basename(name)}" + path = group.gsub('.', '/') + "/#{id}/#{version}/#{upload_name}" unless task = Buildr.application.lookup(uri+path) deps = [self] @@ -212,6 +239,10 @@ module Buildr #:nodoc: options = upload_to[:options] || {:permissions => upload_to[:permissions]} info "Deploying #{to_spec}" URI.upload uri + path, name, options + if snapshot? && pom != self + maven_metadata = group.gsub('.', '/') + "/#{id}/#{version}/#{MAVEN_METADATA}" + URI.upload uri + maven_metadata, MAVEN_METADATA, :permissions => upload_to[:permissions] + end end end task @@ -230,6 +261,11 @@ module Buildr #:nodoc: group.gsub('.', '/') end + def upload_name + return File.basename(name) unless snapshot? + return File.basename(name).gsub(/SNAPSHOT/, "#{final_version}-1") + end + def extract_type(type) return :jar if type == :bundle type @@ -400,6 +436,7 @@ module Buildr #:nodoc: unless @content enhance do write name, self.content + write MAVEN_METADATA, maven_metadata_xml if snapshot? end class << self http://git-wip-us.apache.org/repos/asf/buildr/blob/0ba77e34/spec/packaging/artifact_spec.rb ---------------------------------------------------------------------- diff --git a/spec/packaging/artifact_spec.rb b/spec/packaging/artifact_spec.rb index 53f36cb..79cd67b 100644 --- a/spec/packaging/artifact_spec.rb +++ b/spec/packaging/artifact_spec.rb @@ -1026,6 +1026,24 @@ describe ActsAsArtifact, '#upload' do write repositories.locate(artifact.pom) lambda { artifact.upload }.should raise_error(Exception, /where to upload/) end + + it 'should upload SNAPSHOT with timestamped unique version and maven metadata' do + artifact = artifact('com.example:library:jar:2.0-SNAPSHOT') + # Prevent artifact from downloading anything. + write repositories.locate(artifact) + write repositories.locate(artifact.pom) + + time = Time.gm(2011,"mar",11,14,02,36,123) + Time.stub(:now).and_return(time) + + URI.should_receive(:upload).once. + with(URI.parse('sftp://example.com/base/com/example/library/2.0-SNAPSHOT/library-2.0-20110311.140236-1.pom'), artifact.pom.to_s, anything) + URI.should_receive(:upload).once. + with(URI.parse('sftp://example.com/base/com/example/library/2.0-SNAPSHOT/library-2.0-20110311.140236-1.jar'), artifact.to_s, anything) + URI.should_receive(:upload).once. + with(URI.parse('sftp://example.com/base/com/example/library/2.0-SNAPSHOT/maven_metadata.xml'), "maven_metadata.xml", anything) + verbose(false) { artifact.upload(:url=>'sftp://example.com/base') } + end it 'should accept repositories.release_to setting' do artifact = artifact('com.example:library:jar:2.0') @@ -1039,28 +1057,36 @@ describe ActsAsArtifact, '#upload' do end it 'should use repositories.release_to setting even for snapshots when snapshot_to is not set' do + time = Time.gm(2016,"nov",11,14,02,36,123) + Time.stub(:now).and_return(time) artifact = artifact('com.example:library:jar:2.0-SNAPSHOT') # Prevent artifact from downloading anything. write repositories.locate(artifact) write repositories.locate(artifact.pom) URI.should_receive(:upload).once. - with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/library-2.0-SNAPSHOT.pom'), artifact.pom.to_s, anything) + with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/library-2.0-20161111.140236-1.pom'), artifact.pom.to_s, anything) + URI.should_receive(:upload).once. + with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/library-2.0-20161111.140236-1.jar'), artifact.to_s, anything) URI.should_receive(:upload).once. - with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/library-2.0-SNAPSHOT.jar'), artifact.to_s, anything) + with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/maven_metadata.xml'), "maven_metadata.xml", anything) repositories.release_to = 'sftp://buildr.apache.org/repository/noexist/base' artifact.upload lambda { artifact.upload }.should_not raise_error end it 'should use repositories.snapshot_to setting when snapshot_to is set' do + time = Time.gm(2016,"nov",11,14,02,36,123) + Time.stub(:now).and_return(time) artifact = artifact('com.example:library:jar:2.0-SNAPSHOT') # Prevent artifact from downloading anything. write repositories.locate(artifact) write repositories.locate(artifact.pom) URI.should_receive(:upload).once. - with(URI.parse('sftp://buildr.apache.org/repository/noexist/snapshot/com/example/library/2.0-SNAPSHOT/library-2.0-SNAPSHOT.pom'), artifact.pom.to_s, anything) + with(URI.parse('sftp://buildr.apache.org/repository/noexist/snapshot/com/example/library/2.0-SNAPSHOT/library-2.0-20161111.140236-1.pom'), artifact.pom.to_s, anything) URI.should_receive(:upload).once. - with(URI.parse('sftp://buildr.apache.org/repository/noexist/snapshot/com/example/library/2.0-SNAPSHOT/library-2.0-SNAPSHOT.jar'), artifact.to_s, anything) + with(URI.parse('sftp://buildr.apache.org/repository/noexist/snapshot/com/example/library/2.0-SNAPSHOT/library-2.0-20161111.140236-1.jar'), artifact.to_s, anything) + URI.should_receive(:upload).once. + with(URI.parse('sftp://buildr.apache.org/repository/noexist/base/com/example/library/2.0-SNAPSHOT/maven_metadata.xml'), "maven_metadata.xml", anything) repositories.release_to = 'sftp://buildr.apache.org/repository/noexist/base' repositories.snapshot_to = 'sftp://buildr.apache.org/repository/noexist/snapshot' artifact.upload
