-
Notifications
You must be signed in to change notification settings - Fork 31
Release Workflow
This is the workflow for releasing a new version of XSpec:
-
Prepare the release
- Write release notes (draft). Most of the content is from a private generator, if AirQuick is available to run it (see comment). The New Contributors section comes from GitHub automated release notes; insert this section under "Merged Pull Requests" heading.
- Create a pull request incrementing the version (without
-SNAPSHOT
) ofpom.xml
and the Oxygen add-on and merge it intomaster
-
Release it
-
Deploy the XSpec artifact to Maven Central
- This step must be done immediately before publishing the release so that we can fix any error in
pom.xml
which can be found only by deploying the artifact. - Actual deployment to Sonatype is performed automatically by a GitHub Actions workflow.
- This step must be done immediately before publishing the release so that we can fix any error in
-
Publish the release at Releases page
-
Promote the release
-
-
Prepare the next development
- Close the milestone related to the release
- Create the milestone for the next release
-
Start the next development
- Create a pull request incrementing the version (with
-SNAPSHOT
) ofpom.xml
and merge it intomaster
- Create a pull request incrementing the version (with
The version number consists of three parts, X.Y.Z
. Use the Z
part for pre-releasing:
-
Whenever a commit is made into the
master
branch, a GitHub Actions workflow deploys it automatically to Sonatype asX.Y-SNAPSHOT
.- We omit the
Z
part for simplicity. (See this for Maven version comparison.)
- We omit the
-
Whenever a notable change is made into the
master
branch, incrementZ
inoxygen-addon.xml
and update the add-on changelog.- Do not push a git tag. Do not publish a GitHub pre-release. Do not announce it.
-
When we want to release a stable version, perform this procedure:
- Increment
Z
inoxygen-addon.xml
. - Notify the XSpec discussion list of the upcoming
X.Y
release. (Ignore theZ
part for simplicity.) - After a while, increment
Z
and release it:- Write
X.Y.Z
(without-SNAPSHOT
) tooxygen-addon.xml
andpom.xml
. - Push
vX.Y.Z
git tag and publishvX.Y.Z
GitHub release.
- Write
- Announce the availability of
vX.Y
. (Ignore theZ
part for simplicity.)
- Increment
Here's an example timeline:
master branch commit timeline |
Oxygen add-on release (oxygen-addon.xml) | Maven deployment (pom.xml) | git tag | GitHub Release | Release Announcement | |
---|---|---|---|---|---|---|
Bump Maven version to start the next development | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Notable feature or fix | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel | 2.0.0 |
2.0-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Notable feature or fix | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel | 2.0.1 |
2.0-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Notable feature or fix | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel | 2.0.2 |
2.0-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.0-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel (Stable Release Candidate) | 2.0.3 |
2.0-SNAPSHOT |
(none) | (none) | (none) | |
Stable Release | 2.0.4 |
2.0.4 |
v2.0.4 |
v2.0.4 |
v2.0 |
|
Bump Maven version to start the next development | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
Notable feature or fix | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel | 2.1.0 |
2.1-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
Notable feature or fix | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel | 2.1.1 |
2.1-SNAPSHOT |
(none) | (none) | (none) | |
...trivial or under-the-hood changes... | (unreleased) | 2.1-SNAPSHOT |
(none) | (none) | (none) | |
Release to Oxygen add-on channel (Stable Release Candidate) | 2.1.2 |
2.1-SNAPSHOT |
(none) | (none) | (none) | |
Stable Release | 2.1.3 |
2.1.3 |
v2.1.3 |
v2.1.3 |
v2.1 |
See the latest comment in oxygen-addon.xml
.
- Post a message on the XSpec mailing list
- Promote the new release on xml.com
- Post a message on the xml-dev mailing list
- Add post on xspec.io
- Ask users to tweet about the new release
If you have any questions about XSpec or want to discuss, contribute, and share information with the XSpec community, please go to our issue tracker.
For historical searches, the Google group might also be useful.
- Writing Scenarios
- Nesting Scenarios
- Focusing Your Efforts
- Global Context Item
- Selecting Nodes
- Whitespace-only Text Nodes
- Attribute Value Templates
- Text Value Templates
- Special Names
- Code Coverage
- XML Catalog Support
- Environment Variables
- Testing Dynamic Errors
- Integrating Your Own Test Helpers
- External Transformation
- Getting Started with XSpec and Schematron
- Writing Scenarios for Schematron
- Testing Schematron with Text Nodes
- Testing Schematron with Attributes
- Using Another Implementation of Schematron