Publish the IntelliJ plugin to the JetBrains Marketplace on release - #80
Merged
Merged
Conversation
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
force-pushed
the
jetbrains-marketplace-publishing
branch
from
September 25, 2026 15:30
8d3107e to
c4a837a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The release workflow gets a
jetbrains-pluginjob, afterpublishlike the Gradle plugins. It runsverifyPluginagainst IntelliJ IDEA 2024.2.6 (the build target, and the oldest IDEsinceBuildadmits) and the newest IntelliJ IDEA release, thenpublishPlugin, 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 { } }takescurrent()andlatest { IntellijIdea, RELEASE }instead of the defaultrecommended(), 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.failureLevelisCOMPATIBILITY_PROBLEMS,MISSING_DEPENDENCIESandINVALID_PLUGIN. The default also fails on internal API usages, and the verifier reports one against 2026.2:PluginManager.findEnabledPlugin, called fromFormatterProvider.getPluginDescriptor(), is@ApiStatus.Internalthere, and so arePluginManagerCore.getPlugin,PluginManager.getPluginByClassandPluginAwareClassLoader. The plugin is still compatible; moving off that API is a change of its own.mise.toml:mise run gh:secretssetsJETBRAINS_MARKETPLACE_TOKENfromop://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).publishPluginwithout a token stops with "'token' property must be specified for plugin publishing".act push --dryrunon a simulated tag event resolves the job's steps;:open-java-format-idea-plugin:testpasses.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.