2020-06-19 05:36:30 +00:00
|
|
|
|
# IntelliJ Platform Plugin Template
|
2020-04-21 17:49:38 +00:00
|
|
|
|
|
2020-06-19 06:44:07 +00:00
|
|
|
|
[![official JetBrains project](https://jb.gg/badges/official.svg)][jb:confluence-on-gh]
|
2020-07-01 08:43:14 +00:00
|
|
|
|
[![Twitter Follow](https://img.shields.io/twitter/follow/JBPlatform?style=flat)](https://twitter.com/JBPlatform/)
|
2020-06-19 05:36:30 +00:00
|
|
|
|
![Build](https://github.com/JetBrains/intellij-platform-plugin-template/workflows/Build/badge.svg)
|
2020-06-19 11:04:07 +00:00
|
|
|
|
[![Slack](https://img.shields.io/badge/Slack-%23intellij--platform--plugin--template-blue)][jb:slack]
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-23 11:49:09 +00:00
|
|
|
|
> **TL;DR:** Click the <kbd>Use this template</kbd> button and clone it in IntelliJ IDEA.
|
2020-06-22 11:29:07 +00:00
|
|
|
|
|
2020-06-17 19:06:57 +00:00
|
|
|
|
<!-- Plugin description -->
|
2020-06-22 19:32:51 +00:00
|
|
|
|
**IntelliJ Platform Plugin Template** is a repository that provides a pure boilerplate template to make it easier
|
2020-06-24 09:45:56 +00:00
|
|
|
|
to create a new plugin project (check the [Creating a repository from a template][gh:template] article).
|
2020-06-19 05:36:30 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
The main goal of this template is to speed up the setup phase of plugin development for both new and experienced
|
|
|
|
|
developers by preconfiguring the project scaffold and CI, linking to the proper documentation pages, and keeping
|
|
|
|
|
everything organized.
|
2020-06-23 04:47:08 +00:00
|
|
|
|
|
|
|
|
|
[gh:template]: https://help.github.com/en/enterprise/2.20/user/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template
|
2020-06-17 19:06:57 +00:00
|
|
|
|
<!-- Plugin description end -->
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
If you're still not quite sure what this is all about, read our introduction:
|
|
|
|
|
[What is the IntelliJ Platform?][docs:intro]
|
2020-06-18 11:50:44 +00:00
|
|
|
|
|
2020-07-01 15:57:51 +00:00
|
|
|
|
> **TIP**: Click the <kbd>Watch</kbd> button on the top to be notified about releases containing new features and fixes.
|
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
In this README, we will highlight the following elements of template-project creation:
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-23 04:47:08 +00:00
|
|
|
|
- [Gradle configuration](#gradle-configuration)
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- [Plugin template structure](#plugin-template-structure)
|
2020-06-24 09:45:56 +00:00
|
|
|
|
- [Plugin configuration file](#plugin-configuration-file)
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- [Sample code](#sample-code):
|
|
|
|
|
- listeners – project and dynamic plugin lifecycle
|
|
|
|
|
- services – project-related and application-related services
|
|
|
|
|
- actions – basic action with shortcut binding
|
2020-06-24 09:45:56 +00:00
|
|
|
|
- [Continuous integration](#continuous-integration) based on GitHub Actions
|
|
|
|
|
- [Changelog maintenance](#changelog-maintenance) with the Gradle Changelog Plugin
|
|
|
|
|
- [Release flow](#release-flow) using GitHub Releases
|
|
|
|
|
- [Publishing the plugin](#publishing-the-plugin) with the Gradle IntelliJ Plugin
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
## Getting started
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
Before we dive into plugin development and everything related to it, it's worth mentioning the benefits of using GitHub
|
|
|
|
|
Templates. By creating a new project using the current template, you start with no history and no reference
|
|
|
|
|
to this repository. This allows you to create a new repository easily without having to copy and paste previous content,
|
2020-06-22 19:32:51 +00:00
|
|
|
|
clone repositories, or clear the history manually.
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
All you have to do is click the <kbd>Use this template</kbd> button.
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-19 11:04:07 +00:00
|
|
|
|
![Use this template][file:use-this-template.png]
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
After using the template to create your blank project, the [Template Cleanup][file:template_cleanup.yml] workflow
|
|
|
|
|
will be triggered to override or remove any template-specific configurations, such as the plugin name,
|
|
|
|
|
current changelog, etc. Once this is complete, the project is ready to be cloned to your local environment and opened
|
|
|
|
|
with [IntelliJ IDEA][jb:download-ij].
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
For the last step, you have to manually review the configuration variables described
|
|
|
|
|
in the [gradle.properties][file:gradle.properties] file and *optionally* move sources
|
|
|
|
|
from the *com.github.username.repository* package to the one that works best for you. Then you can get to work
|
|
|
|
|
implementing your ideas.
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
## Gradle configuration
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
The recommended method for plugin development involves using the [Gradle][gradle] setup
|
|
|
|
|
with the [gradle-intellij-plugin][gh:gradle-intellij-plugin] installed. The gradle-intellij-plugin makes it possible
|
|
|
|
|
to run the IDE with your plugin and to publish your plugin to the Marketplace Repository.
|
2020-06-18 11:50:44 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
A project built using the IntelliJ Platform Plugin Template includes a Gradle configuration that's already been set up.
|
2020-06-22 19:32:51 +00:00
|
|
|
|
Feel free to read through the [Using Gradle][docs:using-gradle] articles to get a better understanding of your build
|
|
|
|
|
and to learn how to customize it.
|
2020-06-18 11:50:44 +00:00
|
|
|
|
|
|
|
|
|
The most significant parts of the current configuration are:
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Configuration written with [Gradle Kotlin DSL][gradle-kotlin-dsl].
|
|
|
|
|
- Kotlin support, with the option to write Java code.
|
|
|
|
|
- Integration with the [gradle-changelog-plugin][gh:gradle-changelog-plugin], which automatically patches the change
|
|
|
|
|
notes and description based on the `CHANGELOG.md` and `README.md` files.
|
|
|
|
|
- Integration with the [gradle-intellij-plugin][gh:gradle-intellij-plugin] for smoother development.
|
|
|
|
|
- Code linting with [detekt][detekt].
|
|
|
|
|
- [Plugin publishing][docs:publishing] using the token.
|
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
The project-specific configuration file [gradle.properties][file:gradle.properties] contains:
|
2020-06-22 19:32:51 +00:00
|
|
|
|
|
|
|
|
|
| Property name | Description |
|
|
|
|
|
| ------------------------- | ------------------------------------------------------------------------------------------ |
|
2020-07-03 14:40:40 +00:00
|
|
|
|
| `pluginGroup` | Package name - after *using* the template, this will be set to `com.github.username.repo`. |
|
2020-06-22 19:32:51 +00:00
|
|
|
|
| `pluginName` | Plugin name displayed in the Marketplace and the Plugins Repository. |
|
|
|
|
|
| `pluginVersion` | The current version of the plugin. |
|
|
|
|
|
| `pluginSinceBuild` | The `since-build` attribute of the <idea-version> tag. |
|
|
|
|
|
| `pluginUntilBuild` | The `until-build` attribute of the <idea-version> tag. |
|
|
|
|
|
| `platformType` | The type of IDE distribution. |
|
|
|
|
|
| `platformVersion` | The version of the IntelliJ Platform IDE that will be used to build the plugin. |
|
2020-06-24 09:45:56 +00:00
|
|
|
|
| `platformDownloadSources` | IDE sources downloaded while initializing the Gradle build. |
|
2020-06-22 19:32:51 +00:00
|
|
|
|
|
|
|
|
|
The properties listed define the plugin itself or configure the [gradle-intellij-plugin][gh:gradle-intellij-plugin] –
|
|
|
|
|
check its documentation for more details.
|
|
|
|
|
|
|
|
|
|
## Plugin template structure
|
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
A generated IntelliJ Platform Plugin Template repository contains the following content structure:
|
2020-06-18 20:09:41 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
.
|
2020-06-24 09:45:56 +00:00
|
|
|
|
├── CHANGELOG.md Full change history.
|
2020-06-18 20:09:41 +00:00
|
|
|
|
├── LICENSE License, MIT by default
|
|
|
|
|
├── README.md README
|
2020-06-22 11:07:48 +00:00
|
|
|
|
├── build/ Output build directory
|
2020-06-18 20:09:41 +00:00
|
|
|
|
├── build.gradle.kts Gradle configuration
|
|
|
|
|
├── detekt-config.yml Detekt configuration
|
|
|
|
|
├── gradle
|
2020-06-22 11:07:48 +00:00
|
|
|
|
│ └── wrapper/ Gradle Wrapper
|
2020-06-18 20:09:41 +00:00
|
|
|
|
├── gradle.properties Gradle configuration properties
|
|
|
|
|
├── gradlew *nix Gradle Wrapper binary
|
|
|
|
|
├── gradlew.bat Windows Gradle Wrapper binary
|
|
|
|
|
└── src Plugin sources
|
|
|
|
|
└── main
|
2020-06-22 11:07:48 +00:00
|
|
|
|
├── kotlin/ Kotlin source files
|
|
|
|
|
├── java/ Java source files
|
|
|
|
|
└── resources/ Resources - plugin.xml, icons, messages
|
2020-06-18 20:09:41 +00:00
|
|
|
|
```
|
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
In addition to the configuration files, the most important part is the `src` directory, which contains our
|
|
|
|
|
implementation and the manifest for our plugin – [plugin.xml][file:plugin.xml].
|
2020-06-18 20:09:41 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
## Plugin configuration file
|
|
|
|
|
The plugin configuration file is a [plugin.xml][file:plugin.xml] file located in the `src/main/resources/META-INF`
|
2020-06-22 19:32:51 +00:00
|
|
|
|
directory. It provides general information about the plugin, its dependencies, extensions, and listeners.
|
2020-06-18 20:09:41 +00:00
|
|
|
|
|
|
|
|
|
```xml
|
|
|
|
|
<idea-plugin>
|
|
|
|
|
<id>org.jetbrains.plugins.template</id>
|
|
|
|
|
<name>Template</name>
|
|
|
|
|
<vendor>JetBrains</vendor>
|
|
|
|
|
<depends>com.intellij.modules.platform</depends>
|
|
|
|
|
|
|
|
|
|
<extensions defaultExtensionNs="com.intellij">
|
|
|
|
|
<applicationService serviceImplementation="..."/>
|
|
|
|
|
<projectService serviceImplementation="..."/>
|
|
|
|
|
</extensions>
|
|
|
|
|
|
|
|
|
|
<projectListeners>
|
|
|
|
|
<listener class="..." topic="..."/>
|
|
|
|
|
</projectListeners>
|
|
|
|
|
</idea-plugin>
|
|
|
|
|
```
|
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
You can read more about this file in the [IntelliJ Platform SDK DevGuide][docs:plugin.xml].
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
## Sample code
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
The prepared template provides as little code as possible because it is impossible for a general scaffold to fulfill
|
|
|
|
|
all the specific requirements for all types of plugins (language support, build tools, VCS related tools).
|
|
|
|
|
The template contains only the following files:
|
2020-06-18 20:09:41 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
.
|
|
|
|
|
├── MyBundle.kt Bundle class providing access to the resources messages
|
|
|
|
|
├── listeners
|
2020-06-19 05:36:30 +00:00
|
|
|
|
│ └── MyProjectManagerListener.kt Project Manager listener - handles project lifecycle
|
2020-06-18 20:09:41 +00:00
|
|
|
|
└── services
|
2020-06-22 10:54:50 +00:00
|
|
|
|
├── MyApplicationService.kt Application-level service available for all projects
|
2020-06-18 20:09:41 +00:00
|
|
|
|
└── MyProjectService.kt Project level service
|
|
|
|
|
```
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
These files are located in `src/main/kotlin`. This location indicates the language being used. So if you decide to use
|
|
|
|
|
Java instead, sources should be located in the `src/main/java` directory.
|
2020-06-19 05:36:30 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
## Continuous integration
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
Continuous integration depends on [GitHub Actions][gh:actions], which are a set of workflows that make it possible
|
2020-06-22 19:32:51 +00:00
|
|
|
|
to automate your testing and release process. Thanks to such automation, you can delegate the testing and verification
|
|
|
|
|
phases to the CI and instead focus on development (and writing more tests).
|
2020-06-19 05:36:30 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
In the `.github/workflows` directory, you can find definitions for the following GitHub Actions workflows:
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-19 07:51:04 +00:00
|
|
|
|
- [Build](.github/workflows/build.yml)
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Triggered on `push` and `pull_request` events.
|
|
|
|
|
- Runs the *Gradle Wrapper Validation Action* to verify the wrapper's checksum.
|
|
|
|
|
- Runs the `verifyPlugin` and `test` Gradle tasks.
|
|
|
|
|
- Builds the plugin with the `buildPlugin` Gradle task and provides the artifact for the next jobs in the workflow.
|
|
|
|
|
- Verifies the plugin using the *IntelliJ Plugin Verifier* tool.
|
|
|
|
|
- Prepares a draft release of the GitHub Releases page for manual verification.
|
2020-06-19 07:51:04 +00:00
|
|
|
|
- [Release](.github/workflows/release.yml)
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Triggered on `released` event.
|
|
|
|
|
- Publishes the plugin to the Marketplace using the provided `PUBLISH_TOKEN`.
|
2020-07-06 12:27:26 +00:00
|
|
|
|
- Sets publish channel depending on the plugin version, i.e. `1.0.0-beta` -> `beta` channel.
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Patches the Changelog and commits.
|
2020-06-19 07:51:04 +00:00
|
|
|
|
- [Template Cleanup](.github/workflows/template-cleanup.yml)
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Triggered once on `push` event when a new template-based repository has been created.
|
|
|
|
|
- Overrides the scaffold with files from `.github/template-cleanup` directory.
|
2020-06-24 09:45:56 +00:00
|
|
|
|
- Overrides JetBrains-specific sentences or package names with ones specific to the target repository.
|
2020-06-22 19:32:51 +00:00
|
|
|
|
- Removes redundant files.
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
All of the workflow files have accurate documentation, so it's a good idea to take a look through their sources.
|
2020-05-06 07:13:49 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
### Changelog maintenance
|
2020-06-19 07:51:04 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
When releasing an update, it is important to let your users know what the new version offers. The best way to do this
|
|
|
|
|
is to provide release notes.
|
2020-05-06 07:13:49 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
The changelog is a curated list that contains information about any new features, fixes, and deprecations.
|
|
|
|
|
When they are provided, these lists are available in a few different places: the [CHANGELOG.md](./CHANGELOG.md) file,
|
2020-06-23 10:05:48 +00:00
|
|
|
|
the [Releases page][gh:releases], the *What's new* section of the Marketplace Plugin page,
|
2020-06-19 07:51:04 +00:00
|
|
|
|
and inside of the Plugin Manager's item details.
|
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
There are many methods for handling the project's changelog. The one, used in the current template project
|
|
|
|
|
is the [Keep a Changelog][keep-a-changelog] approach.
|
2020-06-19 07:51:04 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
### Release flow
|
2020-06-19 07:51:04 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
The release process depends on the workflows already described above. When your main branch receives a new pull request
|
2020-06-24 09:45:56 +00:00
|
|
|
|
or a regular push, the [Build](.github/workflows/build.yml) workflow runs multiple tests on your plugin and prepares
|
2020-06-19 11:04:07 +00:00
|
|
|
|
a draft release.
|
2020-06-19 07:51:04 +00:00
|
|
|
|
|
2020-06-19 11:04:07 +00:00
|
|
|
|
![Release draft][file:draft-release.png]
|
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
The draft release is a working copy of a release, which you can review before publishing. It includes a predefined title
|
2020-06-24 09:45:56 +00:00
|
|
|
|
and git tag, which is the current version of the plugin, for example, `v0.0.1`. The changelog is provided
|
2020-06-22 19:32:51 +00:00
|
|
|
|
automatically using the [gradle-changelog-plugin][gh:gradle-changelog-plugin]. An artifact file is also built with
|
2020-06-24 09:45:56 +00:00
|
|
|
|
the plugin attached. Every new Build overrides the previous draft to keep your *Releases* page clean.
|
2020-06-19 11:04:07 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
When you edit the draft and use the <kbd>Publish release</kbd> button, GitHub will tag your repository with the given
|
|
|
|
|
version and add a new entry to the Releases tab. Next, it will notify users that are *watching* the repository, and it
|
|
|
|
|
will trigger the final [Release](.github/workflows/release.yml) workflow.
|
2020-06-19 07:51:04 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
### Publishing the plugin
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-22 19:32:51 +00:00
|
|
|
|
Releasing a plugin to the Marketplace is a straightforward operation that uses the `publishPlugin` Gradle task
|
|
|
|
|
provided by the [gradle-intellij-plugin][gh:gradle-intellij-plugin]. The [Release](.github/workflows/release.yml)
|
|
|
|
|
workflow automates this process by running the task when a new release appears in the GitHub Releases section.
|
2020-06-19 11:04:07 +00:00
|
|
|
|
|
2020-07-06 12:27:26 +00:00
|
|
|
|
> **TIP**: Set a suffix to the plugin version to publish it in the custom repository channel, i.e. `v1.0.0-beta` will
|
|
|
|
|
> push your plugin to the `beta` [release channel][docs:release-channel].
|
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
The authorization process relies on the `PUBLISH_TOKEN` secret environment variable, which has to be acquired
|
2020-06-22 19:32:51 +00:00
|
|
|
|
through the Secrets section of the repository Settings.
|
2020-06-19 11:04:07 +00:00
|
|
|
|
|
|
|
|
|
![Settings > Secrets][file:settings-secrets.png]
|
|
|
|
|
|
|
|
|
|
You can find out how to get that token in the [Providing Your Hub Permanent Token to Gradle][docs:token] article.
|
|
|
|
|
|
|
|
|
|
> **Important:**
|
2020-06-22 19:32:51 +00:00
|
|
|
|
> Before using the automated deployment process, it is necessary to manually create a new plugin in the Marketplace
|
|
|
|
|
> to specify options like the license, repository URL, etc. Please follow
|
|
|
|
|
> the [Publishing a Plugin][docs:publishing] instructions.
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-24 09:45:56 +00:00
|
|
|
|
## Useful links
|
2020-04-22 08:21:51 +00:00
|
|
|
|
|
2020-06-18 11:50:44 +00:00
|
|
|
|
- [IntelliJ Platform SDK DevGuide][docs]
|
2020-06-19 06:44:07 +00:00
|
|
|
|
- [IntelliJ Platform UI Guidelines][jb:ui-guidelines]
|
2020-06-18 20:09:41 +00:00
|
|
|
|
- [Kotlin UI DSL][docs:kotlin-ui-dsl]
|
2020-06-19 06:44:07 +00:00
|
|
|
|
- [IntelliJ SDK Code Samples][gh:code-samples]
|
|
|
|
|
- [JetBrains Platform Slack][jb:slack]
|
|
|
|
|
- [IntelliJ IDEA Open API and Plugin Development Forum][jb:forum]
|
2020-05-06 07:13:49 +00:00
|
|
|
|
- [Keep a Changelog][keep-a-changelog]
|
2020-06-19 06:44:07 +00:00
|
|
|
|
- [GitHub Actions][gh:actions]
|
2020-06-18 11:50:44 +00:00
|
|
|
|
|
|
|
|
|
[docs]: https://www.jetbrains.org/intellij/sdk/docs
|
|
|
|
|
[docs:intro]: https://www.jetbrains.org/intellij/sdk/docs/intro/intellij_platform.html
|
2020-06-18 20:09:41 +00:00
|
|
|
|
[docs:kotlin-ui-dsl]: https://www.jetbrains.org/intellij/sdk/docs/user_interface_components/kotlin_ui_dsl.html
|
|
|
|
|
[docs:plugin.xml]: https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_configuration_file.html
|
2020-06-19 06:44:07 +00:00
|
|
|
|
[docs:publishing]: https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html
|
2020-07-06 12:27:26 +00:00
|
|
|
|
[docs:release-channel]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/deployment.html#specifying-a-release-channel
|
2020-06-19 11:04:07 +00:00
|
|
|
|
[docs:token]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/deployment.html#providing-your-hub-permanent-token-to-gradle
|
2020-06-19 06:44:07 +00:00
|
|
|
|
[docs:using-gradle]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system.html
|
2020-06-17 19:06:57 +00:00
|
|
|
|
|
2020-06-19 11:04:07 +00:00
|
|
|
|
[file:use-this-template.png]: .github/readme/use-this-template.png
|
|
|
|
|
[file:draft-release.png]: .github/readme/draft-release.png
|
2020-06-18 11:50:44 +00:00
|
|
|
|
[file:gradle.properties]: ./gradle.properties
|
2020-06-18 20:09:41 +00:00
|
|
|
|
[file:plugin.xml]: ./src/main/resources/META-INF/plugin.xml
|
2020-06-19 11:04:07 +00:00
|
|
|
|
[file:settings-secrets.png]: .github/readme/settings-secrets.png
|
2020-06-19 06:44:07 +00:00
|
|
|
|
[file:template_cleanup.yml]: ./.github/workflows/template-cleanup.yml
|
|
|
|
|
|
|
|
|
|
[gh:actions]: https://help.github.com/en/actions
|
|
|
|
|
[gh:code-samples]: https://github.com/JetBrains/intellij-sdk-code-samples
|
|
|
|
|
[gh:gradle-changelog-plugin]: https://github.com/JetBrains/gradle-changelog-plugin
|
|
|
|
|
[gh:gradle-intellij-plugin]: https://github.com/JetBrains/gradle-intellij-plugin
|
|
|
|
|
[gh:releases]: https://github.com/JetBrains/intellij-platform-plugin-template/releases
|
|
|
|
|
|
|
|
|
|
[jb:confluence-on-gh]: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub
|
|
|
|
|
[jb:download-ij]: https://www.jetbrains.com/idea/download
|
|
|
|
|
[jb:forum]: https://intellij-support.jetbrains.com/hc/en-us/community/topics/200366979-IntelliJ-IDEA-Open-API-and-Plugin-Development
|
|
|
|
|
[jb:slack]: https://plugins.jetbrains.com/slack
|
|
|
|
|
[jb:ui-guidelines]: https://jetbrains.github.io/ui
|
|
|
|
|
|
|
|
|
|
[keep-a-changelog]: https://keepachangelog.com
|
|
|
|
|
[detekt]: https://detekt.github.io/detekt
|
|
|
|
|
[gradle]: https://gradle.org
|
|
|
|
|
[gradle-kotlin-dsl]: https://docs.gradle.org/current/userguide/kotlin_dsl.html
|