Chapter 17. Project Release Procedures
		This section describes the JBoss Project Release procedure.
	
			Tags on JBoss projects should consist of two parts - project
			identifier and version number. A list of existing modules
			can be found on the
			
				CVS Modules
			
			page. The version number must follow
			
				JBoss Versioning Conventions
			
			. A correctly tagged project would be JBoss_4_0_2, which is
			the tag for the JBoss Application Server, version 4.0.2.
			Note that all '.' from the version have been replaced with
			'_'.
		
17.2. JBoss Versioning Conventions
			Product versions follow this format X.YY.ZZ.Q* (i.e.
			1.2.3.GA, 1.2.3.CR1, 1.2.3.Alpha1-20060205091502)
			
- 
					X signifies major version related to production
					release.
				
- 
					YY signifies minor version with minor feature
					changes or additions (use of even numbers is
					preferred - 3.0, 3.2, 3.4, etc.).
				
- 
					ZZ signifies patches and bug fixes. Minor features
					that do not introduce backward compatibility issues
					are ok.
				
- 
					Q* is an alpha-numeric qualifier. The prefix of the
					qualifier needs to match the qualifier conventions
					listed below to ensure that versions can be compared
					consistently in terms of version ordering.
				
			Major versions are usually developed in multiple iterations.
			Each iteration concludes with an intermediate version
			release. Intermediate versions are annotated with
			appropriate suffixes. This shows the progression of release
			versions. A given release may not have all stages of
			releases shown here.
		
17.2.1. 
				Current Qualifier Conventions (Post 2006-03-01)
			
				The following version conventions were put in place to
				have interop with eclipse/OSGI bundle version
				conventions.
				
- 
						X.Y.ZZ.Alpha# - An Alpha release includes all
						key features and is passing the main test cases.
						It still needs work on edge cases, bug fixes,
						performance tuning and other optimization tasks.
					
- 
						X.Y.ZZ.Beta# - A Beta release is the first
						release that the development and QA teams feel
						comfortable releasing for public testing. Some
						bug fixes and minor optimizations are expected,
						but no significant refactoring should occur. No
						new major features are introduced from this
						phase on. Only stabilizing work.
					
- 
						X.Y.ZZ.CR# - Each candidate for release is a
						potential target for final release. Only if
						unexpected bugs are reported during the
						iteration timeframe the CR number is incremented
						(e.g. jboss-4.0.1.CR1 to jboss-4.0.1.CR2) and
						another release candidate is published.
						Generally only minor bug fixes are introduced to
						code and documentation.
					
- 
						X.Y.ZZ.GA - A Final version is released when
						there are no outstanding issues from the last CR
						version. Usually it's a matter of renaming the
						version from CR# to Final and repackaging the
						software.
					
- 
						X.Y.ZZ.SP# - A service pack release to a final
						release. A service pack may be made when there
						are significant issues found after a final
						release to provide a bug fix release before the
						next scheduled final release.
					
			
				The standard qualifiers are the required prefixes.
				Additional information may be included in the qualifer
				as a suffix to incorprate information such as the build
				id to allow for distinction between nightly builds for
				example. If a given branch of a project is at
				1.2.3.Beta1, the full version used could include a build
				id based on a GMT timestamp, the actual number of
				builds, etc. using a full qualifier syntax like
				Beta1-NNN where NNN is the numeric build id.
			
				The key thing is that all version usage be consistent
				for a given project. A project cannot include a build id
				in the nightly builds, and then fail to include a build
				id of greater value when 1.2.3.Beta1 is actually
				released. The reason is that 1.2.3.Beta1 cannot be seen
				to be older than some previous 1.2.3.Beta1-NNN nightly
				build.
			
17.2.3. Legacy Qualifier Conventions (Pre 2006-03-01)
				
- 
						X.Y.ZZ.DR# - DR stands for Development Release.
						There could be a number of development releases.
						For example jboss-4.0.0DR1. A development
						release is a significant project milestone, but
						it does not implement all of the key features
						targeted for the public release.
					
- 
						X.Y.ZZ.Alpha - An Alpha release includes all key
						features and is passing the main test cases. It
						still needs work on edge cases, bug fixes,
						performance tuning and other optimization tasks.
					
- 
						X.Y.ZZ.Beta - A Beta release is the first
						release that the development and QA teams feel
						comfortable releasing for public testing. Some
						bug fixes and minor optimizations are expected,
						but no significant refactoring should occur. No
						new major features are introduced from this
						phase on. Only stabilizing work.
					
- 
						X.Y.ZZ.RC# - Each release candidate is a
						potential target for final release. Only if
						unexpected bugs are reported during the
						iteration timeframe the RC number is incremented
						(e.g. jboss-4.0.1RC1 to jboss-4.0.1RC2) and
						another release candidate is published.
						Generally only minor bug fixes are introduced to
						code and documentation.
					
- 
						X.Y.ZZ.Final - A Final version is released when
						there are no outstanding issues from the last RC
						version. Usually it's a matter of renaming the
						version from RC# to Final and repackaging the
						software (jboss-4.0.1).
					
- 
						X.Y.ZZ.SP# - A service pack release to a final
						release. A service pack may be made when there
						are significant issues found after a final
						release to provide a bug fix release before the
						next scheduled final release.
					
			
17.3. JBoss Naming Conventions
17.3.1. Naming of Build Artifacts
				When creating jars as a result of a project's build, do
				not include the version element in the jar name. An
				example of that would be the current JBoss Messaging
				component of the Application Server - jbossmq.jar and
				not jbossmq-1.1.jar
			
17.3.2. Jar Manifest Headers
				The standard Java version information and OSGI bundle
				version headers and their usage needs to be defined. The
				standard java jar manifest headers should include:
				
- Manifest-Version: 1.0
- 
						Created-By: @java.vm.version@ (@java.vm.vendor@)
					
- 
						Specification-Title: @specification.title@
					
- 
						Specification-Version: @specification.version@
					
- 
						Specification-Vendor: @specification.vendor@
					
- 
						Implementation-Title: @implementation.title@
					
- 
						Implementation-URL: @implementation.url@
					
- 
						Implementation-Version: @implementation.version@
					
- 
						Implementation-Vendor: @implementation.vendor@
					
- 
						Implementation-Vendor-Id:
						@implementation.vendor.id@
					
				where:
				
- 
						Specification-Title: whatever name/standard name
						the jar implements
					
- 
						Specification-Version: the version number
					
- 
						Specification-Vendor: JBoss (
						http://www.jboss.org/
						)
					
- 
						Implementation-Title: name with additional
						implementation details
					
- 
						Implementation-URL:
						http://www.jboss.org/
- 
						Implementation-Version: a full implementation
						version with addition build info. For example:
						${version.major}.${version.minor}.${version.revision}.${version.tag}
						(build: CVSTag=${version.cvstag}
						date=${build.id})
					
- 
						Implementation-Vendor: JBoss Inc.
					
- 
						Implementation-Vendor-Id:
						http://www.jboss.org/
			
17.4. Pre-Release Checklist
			A few tasks need to be completed before a project is handed
			off for release QA.
			
- 
					The files to be released should be tagged using the
					correct tagging convention, and the tags should
					match the appropriate version, refer to
					
						Tagging Standards
					
- 
					A roadmap which corresponds to the tag (eg. an RC1
					release) should be present in JIRA, and each task in
					the roadmap must be marked off as completed
				
- 
					Product version should follow
					
						Versioning Conventions
					
- 
					The binary outputs for the project should be built
					and added to the repository
				
- 
					MD5 checksums should be generated for the binary
					outputs of the project
				
- 
					The testsuite should be able to run with a 100%
					success rate
				
- 
					Create a JBQA issue in JIRA for coordination with QA
				
			Once all items on the Pre-Release Checklist have been
			completed, the project is ready for release testing.
		
			When a project is ready for a release and the
			
				Pre-Release Checklist
			
			has been completed, the QA team follows a standard release
			procedure outlined below.
		
			
- 
					2 weeks prior to release the project team should
					open a JIRA issue in the JBoss QA project detailing
					what will be released, the date it is expected to be
					released on, and the CVS tag which will be used for
					the release
				
- 
					On release day the team will tag their project
					appropriately and enter a comment on the JIRA issue
					notifying QA that the project is now ready for the
					QA process.
				
- 
					QA team checks out the project and any dependent
					modules from cvs by the specified tag
				
- 
					QA team then builds the project using the target
					distr from the build script
				
- 
					QA team will then run the testsuite for the specific
					project and analyze their results - if any failures
					are present those issues need to be resolved by the
					QA or project teams before the release process could
					resume
				
- 
					QA team will verify documentation is present and
					correct
				
- 
					After all tests are passing, QA team will upload the
					disctribution archives
				
- 
					QA team makes a release on Sourceforge.net and a
					binary release to jboss-head
				
			For more detailed release process on existing JBoss
			Projects, refer to
			
				JBoss QA Wiki
			
			page
		
			The Project Management System (JIRA) automatically generates
			Release Notes for a project. This is covered in
			Release Notes
			section of the JIRA chapter