Apache Struts 2 Documentation > Home > Guides > Contributors Guide > Creating and Signing a Distribution |

Apache Struts 2 Documentation
Creating and Signing a Distribution
Edit Page Browse Space Add Page Add News
Added by Ted Husted, last edited by Ted Husted on Feb 11, 2007 (view change)

| Developers using Linux workstations can skip over the references to PuTTY and Cygwin

## Each time

(There are also one-time setup instructions)

To keep this list current, it is strongly recommended that release managers refer to and follow this list each time a distribution is created. If any of the steps need to be amended, then please update the list.

0 | Ensure that the master POM and Struts Annotations have current releases, and review JIRA for any issues without a fix version set, and for any issues that should be resolved for the pending release.
1 | Delete the struts2 items in your local Maven2 repository and obtain a fresh checkout.
    svn co https://svn.apache.org/repos/asf/struts/struts2/trunk STRUTS_#_#_#
2 | Update the release notes and POMs to remove "-SNAPSHOT" from the version, commit the POM changes, and note the revision number
3 | Tag the release by making a SVN copy of the head or designated revision
    svn copy -r ######
      https://svn.apache.org/repos/asf/struts/struts2/trunk
      https://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_#_#_#
      -m "WW-#### Tag r###### as Struts #.#.#"
4 | Assemble the release (see notes)
    mvn clean install site -P all,alljars,pre-assembly
    cd assembly
    mvn clean assembly:assembly
The assembly module is not listed in the 'all' profile, so it does not get cleaned on line 1 above. From a clean Subversion checkout against a clean Maven repository, you may need to build the plugins first so that they exist in your working repository.
5 | Under CygWin or Linux, sign the Maven artifacts (`from .\STRUTS_###`) (see notes)
    mvn -P release,all -Dpassphrase="$PASSPHRASE"
6 | Deploy the Maven artifacts to the staging repository
| Create a release folder at people.apache.org://www/people.apache.org/builds/struts/#.#.#, and make sure the staging repository at `http://people.apache.org/builds/struts/m2-staging-repository` is empty or missing, then:
    mvn deploy -P all,pre-assembly
| Then, move the staging repository under the new #.#.# folder (`mv m2-staging-repository 2.0.5`)
7 | Sign the Maven artifacts (in `assembly/target/assembly/out`)
    gpg --armor --output struts-#.#.#-all.zip.asc --detach-sig struts-#.#.#-all.zip
    openssl md5 < struts-#.#.#-all.zip > struts-#.#.#-all.zip.md5
| (Under CygWin, use the `$ mount` command to check your drive and path mappings.)
8 | `pscp` or `scp` the artifacts and signatures to `people.apache.org:/www/people.apache.org/builds/struts/#.#.#`
9 | Leaving the clean STRUTS_### folder be, update your usual working copy (`svn up`), change the POMs to next version number, add the "-SNAPSHOT" suffix, and commit the POM changes.
10 | Update JIRA roadmap with tag/release date; Add next milestone to the JIRA roadmap; Create DONE and TODO filters, share with all, and remove obsolete TODO filter; Create new release page, link from Migration Guide, and link to prior release page and JIRA filters. Update site.xml with link to new release notes.
11 | Deploy the new snapshot from the Struts 2 trunk (with the latest POMs)
    mvn clean install site -P all,alljars,pre-assembly
    mvn site-deploy -Pall
12 | Announce the test build to the dev list first and post a release/quality vote. If the distribution is being mirrored (there was a favorable release vote), copy the ZIPs to `/www/www.apache.org/dist/struts`, wait 24 hours beforing updating the `download.xml` page and making any announcement to the user list or general public.

## One time

### Create and install a SSH key

1 | Install PuTTY
2 | Use PuttyGen to create a SSH key (see Putty help for details)
3 | Use PuTTY to ssh to people.apache.org
4 | Create a ~/.ssh folder
5 | `pscp` your SSH public key to `~/authorized_keys`
6 | ssh to p.a.o
7 | Create a `~\.ssh` folder and move authorized_keys there
8 | Configure putty to use your private key and save the session

### Create a PGP key

1 | Install cgywin, including utils/gpg
2 | Generate a key with `$ gpg --gen-key`
3 | Backup your cygwin home directory to another media
4 | Add your key to `people.apache.org/www.apache.org/dist/struts/KEYS`

### Update Maven settings for our servers

1 | Create a settings.xml under .m2 (in your Document and Settings folder)
    <settings xmlns="http://maven.apache.org/POM/4.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <!-- Uncomment this when the 'central' repo on ibiblio is down
             See: http://maven.apache.org/guides/mini/guide-mirror-settings.html -->
        <!-- mirrors>
          <mirror>
            <id>ggi-project.org</id>
            <url>http://ftp.ggi-project.org/pub/packages/maven2</url>
            <mirrorOf>central</mirrorOf>
          </mirror>
        </mirrors -->
        <servers>
           <server>
              <id>apache.snapshots</id>
              <username>$USERID</username>
              <privateKey>$PATH_TO_PRIVATE_KEY</privateKey>
              <directoryPermissions>775</directoryPermissions>
              <filePermissions>644</filePermissions>
           </server>
           <server>
              <id>struts-staging</id>
              <username>$USERID</username>
              <privateKey>$PATH_TO_PRIVATE_KEY</privateKey>
           </server>
           <server>
              <id>apache-site</id>
              <username>$USERID</username>
              <privateKey>$PATH_TO_PRIVATE_KEY</privateKey>
           </server>
        </servers>
       <profiles>
           <profile>
            <id>cargo-config</id>
             <properties>
                <cargo.tomcat5x.home>$CATALINA_HOME</cargo.tomcat5x.home>
             </properties>
          </profile>
          <profile>
             <id>struts-staging</id>
             <repositories>
               <repository>
                 <id>struts-staging</id>
                 <url>http://people.apache.org/builds/struts/m2-staging-repository</url>
                 <snapshots><enabled>false</enabled></snapshots>
                 <releases><enabled>true</enabled></releases>
               </repository>
              </repositories>
            </profile>
       </profiles>
       <activeProfiles>
          <activeProfile>cargo-config</activeProfile>
       </activeProfiles>
    </settings>

### Expose a copy of known hosts to Maven

1 | From cygwin, ssh to people.apache.org, save the public key if prompted, and exit
| cygwin will save the known hosts to your `~/.ssh` folder, but the script cannot access it there (from Windows)
2 | From cygwin (not Windows) create another `.ssh` folder at
3 | Copy the `known_hosts` file to the new `.ssh` folder

### Increase Memory Settings for Maven

To complete a full build and all the tests, it may be neccesary to increase the amount of memory available to Maven. The simplest thing is to set an environment variable.

- `MAVEN_OPTS=-Xmx512m` or even `MAVEN_OPTS=-Xmx1024m`

### Skip Tests

On occasion, it can be helpful to skip the unit tests to be sure the buid otherwise completes. From the command line, add

- `-Dmaven.test.skip=true`

Do not do this when building a release!

## Resources

- Apache Struts Release Guidelines
- Struts Maintenance Guide for Maven
- Signing Releases
- Wendy's notes on Release Signing
- Apache Mirroring Guidelines

## Retagging

If a tagged build needs to be retagged, be sure to delete the old tag first.

    svn delete https://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_#_#_# -m "WW-### Removing first try at 2.#.#."

## Interim Notes on Cobbling a Distribution

To update the Java 4 distribution

Before tagging

- If needed, update the translator JARs and translate batch file under "backport"
- If needed, update the translate batch file as to the Struts version under "backport"

After assembly, before signing

- Extract assembly to a root drive (`\struts-2.0.x`)
- Copy (export) the "backport" folder that is under SVN to `\struts-2.0.x\j4`
- Run the translate batch file
- Create struts-2.0.x-j4.zip archive
- Also create a struts-2.0.x-docs.zip archive
- Update struts-2.0.x-all.zip archive

Before signing

- There's a bug in the current Maven GPG. The workaround is, before signing, copy the Apps WARs as JARs. This should go away in the next GPG release.

## Amending a log entry

If the commit was fine, but the log was wrong, updating the log entry is easy. For example,

    > svn propset --revprop -r 504523 svn:log "WW-1715 Branch for 2.0.x at Struts 2.0.6-SNAPSHOT r504196"
    > property 'svn:log' set on repository revision 504523

See `svn help propset` for more.

## Sample Test Build Announcement

Test builds are only announced to the dev list. Announcements to the user list can only be made pursuant to a release vote with the consent of the PMC.

> The test build of Struts 2.0.3 is available.

> No determination as to the quality ('alpha,' 'beta,' or 'GA') of Struts 2.0.3 has been made, and at this time it is simply a "test build". We welcome any comments you may have, and will take all feedback into account if a quality vote is called for this build.

> Release notes:

> - [LINK]

> Distribution:

> - http://people.apache.org/builds/struts/#.#.#/

> Maven 2 staging repository:

> - http://people.apache.org/builds/struts/#.#.#/m2-staging-repository/

> We appreciate the time and effort everyone has put toward contributing code and documentation, posting to the mailing lists, and logging issues.

## Sample Release/Quality Vote

> The Struts #.#.# test build has been available since ## ### ####.

> Release notes:

> - [LINK]

> Distribution:

> - http://people.apache.org/builds/struts/#.#.#/

> Maven 2 staging repository:

> - http://people.apache.org/builds/struts/#.#.#/m2-staging-repository/

> If you have had a chance to review the test build, please respond with a vote on its quality:

> [ ] Leave at test build
> [ ] Alpha
> [ ] Beta
> [ ] General Availability (GA)

> Everyone who has tested the build is invited to vote. Votes by PMC members are considered binding. A vote passes if there are at least three binding +1s and more +1s than -1s.

> Please keep in mind that the act of voting carries certain obligations. A binding vote not only states an opinion, but means that the voter is agreeing to help do the work.

## Sample Release Announcment

> The Apache Struts team is pleased to announce the release of Struts #.#.# $GRADE.

> Struts #.#.# is available in a full distribution, or as separate library, source, example and documentation distributions.

> http://struts.apache.org/download.cgi#struts###

> It is also available in the central Maven repository under Group ID "org.apache.struts".

> The #.#.x series of the Apache Struts framework has a minumum requirement of the following specification versions:

> - Java Servlet #.# and JavaServer Pages (JSP) #.#
> - Java 2 Standard Platform Edition (J2SE) #.#

> The release notes are available online at:

> - [LINK]

> Please feel free to test the distribution and post your comments to the user list, or, if appropriate, file a ticket with JIRA.