Apache Struts IntelliJ IDEA plugin

Clone this repo:
  1. 8fcc9d2 Merge pull request #59 from apache/ci/pin-actions-to-sha by Lukasz Lenart · 6 days ago main v253.18979-nightly.4
  2. 5605aa5 ci: re-trigger workflow after infrastructure-actions sync by Lukasz Lenart · 6 days ago
  3. a6dc6f5 ci: trigger workflow re-run after infrastructure-actions approval by Lukasz Lenart · 8 days ago
  4. 972b54e ci: pin all GitHub Actions to SHA hashes for supply chain security by Lukasz Lenart · 10 days ago
  5. 26ae22d ci(deps): bump JetBrains/qodana-action from 2025.3.1 to 2025.3.2 (#58) by dependabot[bot] · 2 weeks ago v253.18979-nightly.3

Apache Struts IntelliJ IDEA plugin

Build

Provides full integration of Apache Struts 2.

Documentation

Questions related to the usage of the plugin should be posted to the user mailing list. Any issues should be reported using JIRA and IDEA plugin component.

Testing

Tests are located in src/test/java and use IntelliJ Platform test frameworks (LightJavaCodeInsightFixtureTestCase and similar). Test data fixtures are in src/test/testData.

./gradlew test -x rat                        # Run tests (excluding Apache RAT license checks)
./gradlew test --tests "OgnlParsingTest"     # Run a specific test class
./gradlew test --tests "*Resolving*"         # Run tests matching a pattern

Code coverage

Kover is integrated for code coverage. Generate an HTML report with:

./gradlew koverHtmlReport                    # Report in build/reports/kover/

Changelog maintenance

The project follows the Keep a Changelog approach. The Gradle Changelog Plugin propagates entries from CHANGELOG.md to the JetBrains Marketplace plugin page.

Record changes under the [Unreleased] section in CHANGELOG.md. The CI pipeline handles version bumping on release.

Release process

The plugin uses a two-phase release process with nightly builds for continuous delivery:

Nightly builds are created automatically when commits are merged to main. The Build workflow runs tests, builds the plugin, and publishes it to the JetBrains Marketplace nightly channel. A GitHub pre-release is also created with the plugin zip attached.

Preparing a release is a manual step. Go to Actions → Prepare Release → Run workflow, optionally providing a version override. This workflow:

  1. Builds the plugin (using the version from gradle.properties or your override)
  2. Creates a git tag v{VERSION} and pushes it
  3. Creates a GitHub pre-release with the plugin zip attached

PMC members can then download the zip from the pre-release, test it locally, and vote.

Publishing a release happens when the pre-release is promoted to a full release. Edit the GitHub pre-release, uncheck “Set as a pre-release”, and save. This triggers the Release workflow which:

  1. Publishes the plugin to the JetBrains Marketplace Stable channel
  2. Uploads the plugin zip as a release asset
  3. Creates a pull request to update the changelog