Skip to content

Axis2/C Release Process

This document describes the Apache Software Foundation (ASF) release process for Apache Axis2/C. All releases must comply with ASF Release Policy.

Prerequisites

Release Manager Requirements

The Release Manager (RM) must:

  1. Be an Apache committer with write access to the repository
  2. Have a PGP key that meets ASF requirements:
  3. RSA key with at least 4096 bits (recommended)
  4. Key must be signed by other Apache committers (web of trust)
  5. Public key must be uploaded to public key servers

  6. Export and register your PGP key:

    # Export your public key
    gpg --armor --export your-key-id >> KEYS
    
    # Verify key is available
    gpg --list-secret-keys
    

  7. Append your key to the KEYS file at:

  8. https://dist.apache.org/repos/dist/release/axis/axis2/c/core/KEYS
  9. https://dist.apache.org/repos/dist/dev/axis/axis2/c/core/KEYS

Build Environment

Ensure you have:

  • GCC or Clang compiler
  • Autotools (autoconf, automake, libtool)
  • OpenSSL development headers
  • Apache httpd development headers (for mod_axis2)
  • Optional: libxml2, json-c, nghttp2

Release Process Overview

  1. Prepare the release branch
  2. Update version numbers and documentation
  3. Build and test source distribution
  4. Sign artifacts and generate checksums
  5. Upload to ASF staging area
  6. Call for vote
  7. After vote passes: promote release
  8. Deploy updated website
  9. Announce release

Source-Only Releases

Axis2/C follows the same release model as Apache httpd: source-only releases.

Per the ASF Release Policy:

"Every ASF release MUST contain one or more source packages... binary/bytecode packages MAY be distributed alongside official Apache releases."

The Apache HTTP Server Project explicitly states:

"The Apache HTTP Server Project itself does not provide binary releases of software, only source code."

Why source-only for Axis2/C:

  • ASF Policy Compliance: Source releases are required; binaries are optional
  • Apache httpd Precedent: The flagship ASF C project releases source-only
  • ABI Complexity: C binary compatibility varies by compiler, flags, and linked libraries
  • Platform Diversity: Maintaining binaries for Linux, macOS, FreeBSD, Android is impractical
  • Modern Practice: Users install via system package managers (apt, yum, brew) or build from source
  • Enterprise Expectations: Production deployments typically build from source with custom configurations

Users who need pre-built binaries should use their distribution's package manager or build from source.

Note on Nexus Staging Repository

Unlike Java projects (such as Axis2/Java) which use the Nexus staging repository to publish Maven artifacts to Maven Central, Axis2/C is a native C library that does not produce Maven artifacts.

For C projects, the release distribution mechanism is:

  • Source tarballs are uploaded directly to dist.apache.org SVN repositories
  • There is no Nexus step required for Axis2/C releases

This is consistent with Apache httpd and other Apache C projects.

Step 1: Prepare the Release

1.1 Create a Release Branch (Optional)

For major releases, consider creating a release branch:

git checkout master
git pull origin master
git checkout -b release/2.0.0

For minor/patch releases, you may release directly from master.

1.2 Update Version Numbers

Update version in these files:

File Description
configure.ac AC_INIT(axis2c-src, X.Y.Z) and VERSION_NO
util/configure.ac VERSION_NO
axiom/configure.ac VERSION_NO
guththila/configure.ac VERSION_NO
neethi/configure.ac VERSION_NO
samples/configure.ac Version references
NOTICE Copyright year range
NEWS Release notes summary
doxygenconf PROJECT_NUMBER

1.3 Update Documentation

  • Update docs/release-notes-X.Y.Z.md with resolved issues
  • Review and update INSTALL file if needed
  • Verify all documentation links work

1.4 Regenerate Build System

./autogen.sh

Step 2: Build and Test

2.1 Build from Source

./configure --prefix=/tmp/axis2c-test \
    --enable-tests=yes \
    --with-apache2=/usr/include/apache2
make clean
make
make check
make install

2.2 Run Test Suite

make check

Verify all tests pass. Fix any failures before proceeding.

2.3 Create Source Distribution

make dist
# Creates: axis2c-src-X.Y.Z.tar.gz

2.4 Verify Source Distribution Builds

# Extract and build from source tarball
tar xzf axis2c-src-X.Y.Z.tar.gz
cd axis2c-src-X.Y.Z
./configure --prefix=/tmp/axis2c-verify
make
make check

Step 3: Sign and Checksum

ASF releases require GPG signatures and SHA-512 checksums (MD5 and SHA-1 are no longer acceptable).

3.1 Sign Artifacts

#!/bin/bash
VERSION="2.0.0"

# Sign source distribution
gpg --armor --detach-sign axis2c-src-${VERSION}.tar.gz

3.2 Create SHA-512 Checksums

#!/bin/bash
VERSION="2.0.0"

sha512sum axis2c-src-${VERSION}.tar.gz > axis2c-src-${VERSION}.tar.gz.sha512

3.3 Verify Signatures

# Verify GPG signatures
gpg --verify axis2c-src-${VERSION}.tar.gz.asc axis2c-src-${VERSION}.tar.gz

# Verify checksums
sha512sum -c axis2c-src-${VERSION}.tar.gz.sha512

Step 4: Upload to Staging

4.1 Upload to ASF Development Area

Use SVN to upload to the development distribution area. Note the SVN dev path does NOT include core/ — it is dist/dev/axis/axis2/c/:

# Checkout dev area (empty directory, creates it if needed)
svn checkout https://dist.apache.org/repos/dist/dev/axis/axis2/c/ ~/repos/axis2c-dev-dist
cd ~/repos/axis2c-dev-dist

# Create version directory and copy artifacts
mkdir ${VERSION}
cp ~/repos/axis-axis2-c-core/axis2c-src-${VERSION}.tar.gz     ${VERSION}/
cp ~/repos/axis-axis2-c-core/axis2c-src-${VERSION}.tar.gz.asc ${VERSION}/
cp ~/repos/axis-axis2-c-core/axis2c-src-${VERSION}.tar.gz.sha512 ${VERSION}/

# Commit
svn add ${VERSION}
svn commit -m "Stage Apache Axis2/C ${VERSION} RC1 for vote"

Do NOT copy KEYS into the version directory — the KEYS file lives at the parent level (dist/release/axis/axis2/c/KEYS) and is already maintained.

4.2 Build and Commit Site to core-staging

The site is built with MkDocs and committed to axis2/c/core-staging/ in the axis-site repo. ASF GitPubSub auto-publishes this to https://axis.apache.org/axis2/c/core-staging/ within minutes of the push.

This is a temporary staging directory used only during the release vote — identical to the Axis2/Java core-staging pattern. Do NOT update core/ yet; that happens post-vote (Step 7).

# Install MkDocs if not already available
pip install mkdocs mkdocs-material

# Build site from axis-axis2-c-core docs/
cd ~/repos/axis-axis2-c-core
mkdocs build
# Output is in site/

# Sync built site into core-staging (does not touch production core/)
rsync -av ~/repos/axis-axis2-c-core/site/ ~/repos/site/axis-site/axis2/c/core-staging/

# Commit to axis-site master branch
cd ~/repos/site/axis-site
git add axis2/c/core-staging/
git commit -m "axis2/c core-staging for ${VERSION} release vote"
git push

Before building, ensure docs/downloads.md has the correct download links for the new version pointing to downloads.apache.org/axis/axis2/c/${VERSION}/.

Step 5: Call for Vote

5.1 Send Vote Email

Send a vote email to c-dev@axis.apache.org. Keep it brief — see the Axis2/Java vote format as a model:

Subject: [VOTE] Release Apache Axis2/C X.Y.Z

I'd like to call a vote on releasing Apache Axis2/C X.Y.Z.

This is the first release of Axis2/C since 1.6.0 in 2009. Version X.Y.Z
includes 17 years of bug fixes (115+ Jira issues resolved), HTTP/2 support
with pure JSON-RPC services, and removes obsolete transports (TCP, CGI,
libcurl, AMQP, IIS/ISAPI).

Git tag: https://github.com/apache/axis-axis2-c-core/releases/tag/vX.Y.Z

Distributions: https://dist.apache.org/repos/dist/dev/axis/axis2/c/X.Y.Z/

Site: https://axis.apache.org/axis2/c/core-staging/

+1 from me

Your Name

Notes: - The site link uses core-staging/ — the temporary preview URL built in Step 4.2. This matches the Axis2/Java release pattern. - After the vote passes, core-staging is promoted to core/ (Step 7) and deleted. - The distributions path does NOT include /core/

Voting guide: - Download and verify signatures: gpg --verify .asc - Verify checksums: sha512sum -c .sha512 - Build from source and run tests - Review release notes and documentation

### 5.2 Vote Requirements

Per ASF policy:
- Voting period must be **at least 72 hours**
- Requires **at least 3 binding +1 votes** from PMC members
- **No -1 votes** from PMC members (or issues must be resolved)

## Step 6: After Vote Passes

### 6.1 Tag the Release

```bash
git tag -s vX.Y.Z -m "Apache Axis2/C X.Y.Z release"
git push origin vX.Y.Z

6.2 Promote Artifacts to Release Area

# Move from dev to release
svn mv https://dist.apache.org/repos/dist/dev/axis/axis2/c/core/${VERSION} \
       https://dist.apache.org/repos/dist/release/axis/axis2/c/core/ \
       -m "Promote Axis2/C ${VERSION} release"

6.3 Update KEYS File

If new committer keys were added:

svn checkout https://dist.apache.org/repos/dist/release/axis/axis2/c/core/ axis2c-release
cd axis2c-release
# Append new keys
cat new_KEYS >> KEYS
svn commit -m "Update KEYS for ${VERSION} release"

6.4 Archive Old Releases

Per ASF policy, only keep the latest release in the main distribution area:

# Move old versions to archive
svn mv https://dist.apache.org/repos/dist/release/axis/axis2/c/core/OLD_VERSION \
       https://archive.apache.org/dist/axis/axis2/c/core/ \
       -m "Archive Axis2/C OLD_VERSION"

Step 7: Deploy Website

7.1 Promote core-staging to core

After the vote passes, replace the production site with core-staging and delete the staging directory:

cd ~/repos/site/axis-site

# Replace production site with staged content
rsync -av --delete axis2/c/core-staging/ axis2/c/core/

# Remove the staging directory
git rm -r axis2/c/core-staging

# Stage and commit
git add -A axis2/c/core/
git commit -m "Apache Axis2/C ${VERSION} site"
git push

ASF GitPubSub automatically deploys the commit.

7.2 Verify Site Deployment

Verify: - https://axis.apache.org/axis2/c/core/ - https://axis.apache.org/axis2/c/core/downloads/

Deployment is typically within minutes but may take up to an hour.

Step 8: Announce Release

8.1 Wait for Mirror Propagation

Wait for: - Distributions available on mirrors (check https://downloads.apache.org/axis/axis2/c/core/) - Site updated and accessible

8.2 Send Announcement

To c-user@axis.apache.org and c-dev@axis.apache.org:

Subject: [ANNOUNCE] Apache Axis2/C X.Y.Z Released

The Apache Axis2/C team is pleased to announce the release of
Apache Axis2/C X.Y.Z.

Apache Axis2/C is a high-performance web services framework
written in C, supporting HTTP/2, JSON-RPC, and legacy SOAP.

Download:
https://axis.apache.org/axis2/c/core/download.html

Release Notes:
https://axis.apache.org/axis2/c/core/release-notes-X.Y.Z.html

Key changes in this release:
- [List major changes]

Regards,
The Apache Axis2/C Team

To announce@apache.org (separate email, from @apache.org address):

Subject: [ANNOUNCE] Apache Axis2/C X.Y.Z Released

The Apache Axis2/C team is pleased to announce the release of
Apache Axis2/C version X.Y.Z.

Apache Axis2/C is a high-performance SOAP/HTTP web services
framework written in C. It provides support for WS-* specifications
through Rampart/C and modern HTTP/2 + JSON-RPC protocols.

Download: https://axis.apache.org/axis2/c/core/
Documentation: https://axis.apache.org/axis2/c/core/

Regards,
The Apache Axis2/C Team

Step 9: Post-Release Tasks

9.1 Update JIRA

  • Mark the version as released in JIRA
  • Create the next version if not exists
  • Close resolved issues for this release

9.2 Update DOAP File

If one exists, update doap.rdf with the new release information.

9.3 Merge Release Branch

If a release branch was used:

git checkout master
git merge release/X.Y.Z
git push origin master

9.4 Prepare for Next Release

  • Update version in configure.ac to next SNAPSHOT/development version
  • Create empty release notes file for next version

Troubleshooting

Vote Fails

If the vote fails: 1. Address all concerns raised during voting 2. Increment the release candidate number (rc2, rc3, etc.) 3. Upload new artifacts to dev area 4. Call for a new vote

Build Issues

If builds fail on different platforms: 1. Set up CI testing before release 2. Consider using Docker for reproducible builds 3. Test on multiple platforms (Linux, macOS, FreeBSD)

Signature Verification Fails

  1. Ensure your key is uploaded to key servers
  2. Verify KEYS file contains your public key
  3. Re-sign artifacts if needed

References