Skip to content

Publish the IntelliJ plugin to the JetBrains Marketplace on release - #80

Merged
abashev merged 2 commits into
mainfrom
jetbrains-marketplace-publishing
Sep 25, 2026
Merged

abashev merged 2 commits into
mainfrom
jetbrains-marketplace-publishing

Conversation

@abashev

@abashev abashev commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

The release workflow gets a jetbrains-plugin job, after publish like the Gradle plugins. It runs verifyPlugin against IntelliJ IDEA 2024.2.6 (the build target, and the oldest IDE sinceBuild admits) and the newest IntelliJ IDEA release, then publishPlugin, which uploads the zip with the Marketplace token. The plugin zip carries the formatter jars, so the job does not wait for Maven Central. The verifier's report is kept as a workflow artifact when the job fails.

The zip goes up unsigned. The Marketplace signs every upload with the JetBrains key, and the check of the author's own key against the profile that Plugin Signing describes is "not available yet"; a signature of our own is a signing { } block and three secrets away, for when it is wanted.

open-java-format-idea-plugin/build.gradle:

  • pluginVerification { ides { } } takes current() and latest { IntellijIdea, RELEASE } instead of the default recommended(), which resolves to four IDEs (2024.2 to 2025.2, a gigabyte each) and stops there, because the Community and Ultimate types end with 2025.2.
  • failureLevel is COMPATIBILITY_PROBLEMS, MISSING_DEPENDENCIES and INVALID_PLUGIN. The default also fails on internal API usages, and the verifier reports one against 2026.2: PluginManager.findEnabledPlugin, called from FormatterProvider.getPluginDescriptor(), is @ApiStatus.Internal there, and so are PluginManagerCore.getPlugin, PluginManager.getPluginByClass and PluginAwareClassLoader. The plugin is still compatible; moving off that API is a change of its own.

mise.toml: mise run gh:secrets sets JETBRAINS_MARKETPLACE_TOKEN from op://Private/open-java-format/GitHub/JETBRAINS_MARKETPLACE_TOKEN, Actions store only.

Checked locally:

  • verifyPlugin: IC-242.26775.15 and IU-262.10968.63, both "Compatible" (two experimental API usages; on 2026.2 also one deprecated and the one internal).
  • publishPlugin without a token stops with "'token' property must be specified for plugin publishing".
  • act push --dryrun on a simulated tag event resolves the job's steps; :open-java-format-idea-plugin:test passes.

Before the first release with this: a permanent token from plugins.jetbrains.com (profile, My Tokens) for the account that owns plugin 34359, into 1Password under that name, then mise run gh:secrets. The Marketplace already holds 2.98.0.1 to 2.98.0.3, uploaded by hand, and rejects a version it has, so the next tag has to be a new version.

A jetbrains-plugin job in release.yml, after publish like the Gradle plugins: verifyPlugin against
the IDE the plugin is built against and the newest IntelliJ IDEA, then publishPlugin, which signs
the zip when the signing secrets are present and uploads it with the Marketplace token. The zip
carries the formatter jars, so the job does not wait for Maven Central.

The plugin's build script gets the signing block, a verifier IDE set of two instead of
recommended()'s four that stop at 2025.2, and a failure level of what breaks an installation:
2026.2 marks PluginManager.findEnabledPlugin, which the plugin calls, as internal API, and a
warning about that must not hold a release. mise run gh:secrets sets the four new secrets from
1Password.
Comment on lines +288 to +290
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
The Marketplace signs every upload with the JetBrains key, and the check of the author's key
against the profile is not available yet, so a signature of our own buys nothing today. It can
come back with a signing block in the plugin's build script and three secrets when it is wanted.
@abashev
abashev force-pushed the jetbrains-marketplace-publishing branch from 8d3107e to c4a837a Compare September 25, 2026 15:30
@abashev
abashev merged commit 462a18c into main Sep 25, 2026
15 checks passed
@abashev
abashev deleted the jetbrains-marketplace-publishing branch September 25, 2026 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants