blob: 44c36ecdbadffb1ad89656f01c652c76dd2ebbbb [file] [view]
# 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](https://www.apache.org/legal/release-policy.html).
## 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](https://www.apache.org/dev/release-signing.html):
- RSA key with at least 4096 bits (recommended)
- Key must be signed by other Apache committers (web of trust)
- Public key must be uploaded to public key servers
3. **Export and register your PGP key**:
```bash
# Export your public key
gpg --armor --export your-key-id >> KEYS
# Verify key is available
gpg --list-secret-keys
```
4. **Append your key to the KEYS file** at:
- `https://dist.apache.org/repos/dist/release/axis/axis2/c/core/KEYS`
- `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](https://httpd.apache.org/dev/release.html): **source-only releases**.
Per the [ASF Release Policy](https://www.apache.org/legal/release-policy.html):
> "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](https://repository.apache.org) 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:
```bash
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
```bash
./autogen.sh
```
## Step 2: Build and Test
### 2.1 Build from Source
```bash
./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
```bash
make check
```
Verify all tests pass. Fix any failures before proceeding.
### 2.3 Create Source Distribution
```bash
make dist
# Creates: axis2c-src-X.Y.Z.tar.gz
```
### 2.4 Verify Source Distribution Builds
```bash
# 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
```bash
#!/bin/bash
VERSION="2.0.0"
# Sign source distribution
gpg --armor --detach-sign axis2c-src-${VERSION}.tar.gz
```
### 3.2 Create SHA-512 Checksums
```bash
#!/bin/bash
VERSION="2.0.0"
sha512sum axis2c-src-${VERSION}.tar.gz > axis2c-src-${VERSION}.tar.gz.sha512
```
### 3.3 Verify Signatures
```bash
# 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/`:
```bash
# 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).
```bash
# 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/core/${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
```bash
# 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:
```bash
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:
```bash
# 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:
```bash
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:
```bash
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
- [ASF Release Policy](https://www.apache.org/legal/release-policy.html)
- [ASF Release Publishing](https://infra.apache.org/release-publishing.html)
- [Release Signing](https://www.apache.org/dev/release-signing.html)
- [Apache Voting Process](https://www.apache.org/foundation/voting.html)
- [Apache httpd Release Guidelines](https://httpd.apache.org/dev/release.html) - Reference for C project source-only releases
- [Axis2/C Issue Tracker](https://issues.apache.org/jira/projects/AXIS2C)