diff --git a/.github/readme/draft-release.png b/.github/readme/draft-release.png deleted file mode 100644 index 00a4be8..0000000 Binary files a/.github/readme/draft-release.png and /dev/null differ diff --git a/.github/readme/settings-secrets.png b/.github/readme/settings-secrets.png deleted file mode 100644 index a877734..0000000 Binary files a/.github/readme/settings-secrets.png and /dev/null differ diff --git a/.github/readme/use-this-template.png b/.github/readme/use-this-template.png deleted file mode 100644 index 4d43798..0000000 Binary files a/.github/readme/use-this-template.png and /dev/null differ diff --git a/.github/template-cleanup/CHANGELOG.md b/.github/template-cleanup/CHANGELOG.md deleted file mode 100644 index 619f92d..0000000 --- a/.github/template-cleanup/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ - - -# %NAME% Changelog - -## [Unreleased] -### Added -- Initial scaffold created from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template) diff --git a/.github/template-cleanup/README.md b/.github/template-cleanup/README.md deleted file mode 100644 index e78124f..0000000 --- a/.github/template-cleanup/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# %NAME% - -![Build](https://github.com/%REPOSITORY%/workflows/Build/badge.svg) -[![Version](https://img.shields.io/jetbrains/plugin/v/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) -[![Downloads](https://img.shields.io/jetbrains/plugin/d/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) - -## Template ToDo list -- [x] Create a new [IntelliJ Platform Plugin Template][template] project. -- [ ] Verify the [pluginGroup](/gradle.properties), [plugin ID](/src/main/resources/META-INF/plugin.xml) and [sources package](/src/main/kotlin). -- [ ] Review the [Legal Agreements](https://plugins.jetbrains.com/docs/marketplace/legal-agreements.html). -- [ ] [Publish a plugin manually](https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html) for the first time. -- [ ] Set the Plugin ID in the above README badges. -- [ ] Set the [Deployment Token](https://plugins.jetbrains.com/docs/marketplace/plugin-upload.html). -- [ ] Click the Watch button on the top of the [IntelliJ Platform Plugin Template][template] to be notified about releases containing new features and fixes. - - -This Fancy IntelliJ Platform Plugin is going to be your implementation of the brilliant ideas that you have. - -This specific section is a source for the [plugin.xml](/src/main/resources/META-INF/plugin.xml) file which will be extracted by the [Gradle](/build.gradle.kts) during the build process. - -To keep everything working, do not remove `` sections. - - -## Installation - -- Using IDE built-in plugin system: - - Preferences > Plugins > Marketplace > Search for "%NAME%" > - Install Plugin - -- Manually: - - Download the [latest release](https://github.com/%REPOSITORY%/releases/latest) and install it manually using - Preferences > Plugins > ⚙️ > Install plugin from disk... - - ---- -Plugin based on the [IntelliJ Platform Plugin Template][template]. - -[template]: https://github.com/JetBrains/intellij-platform-plugin-template diff --git a/.github/template-cleanup/gradle.properties b/.github/template-cleanup/gradle.properties deleted file mode 100644 index aad4b7c..0000000 --- a/.github/template-cleanup/gradle.properties +++ /dev/null @@ -1,19 +0,0 @@ -# IntelliJ Platform Artifacts Repositories -# -> https://www.jetbrains.org/intellij/sdk/docs/reference_guide/intellij_artifacts.html - -pluginGroup = %GROUP% -pluginName_ = %NAME% -pluginVersion = 0.0.1 -pluginSinceBuild = 193 -pluginUntilBuild = 202.* - -platformType = IC -platformVersion = 2019.3 -platformDownloadSources = true -# Plugin Dependencies -> https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html -# Example: platformPlugins = com.intellij.java,com.jetbrains.php:203.4449.22 -platformPlugins = - -# Opt-out flag for bundling Kotlin standard library. -# See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details. -kotlin.stdlib.default.dependency = false diff --git a/.github/template-cleanup/settings.gradle.kts b/.github/template-cleanup/settings.gradle.kts deleted file mode 100644 index 34ec91d..0000000 --- a/.github/template-cleanup/settings.gradle.kts +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "%NAME%" diff --git a/.github/workflows/template-cleanup.yml b/.github/workflows/template-cleanup.yml deleted file mode 100644 index 93c613c..0000000 --- a/.github/workflows/template-cleanup.yml +++ /dev/null @@ -1,74 +0,0 @@ -# GitHub Actions Workflow responsible for cleaning up the IntelliJ Platform Plugin Template repository from -# the template-specific files and configurations. This workflow is supposed to be triggered automatically -# when a new template-based repository has been created. - -name: Template Cleanup -on: - push: - branches: - - main - -jobs: - - # Run cleaning process only if workflow is triggered by the non-JetBrains/intellij-platform-plugin-template repository. - template-cleanup: - name: Template Cleanup - runs-on: ubuntu-latest - if: github.event.repository.name != 'intellij-platform-plugin-template' - steps: - - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2 - - # Cleanup project - - name: Cleanup - run: | - export LC_CTYPE=C - export LANG=C - - # Prepare variables - NAME="${GITHUB_REPOSITORY##*/}" - SAFE_NAME=$(echo $NAME | sed 's/[^a-zA-Z0-9]//g' | tr '[:upper:]' '[:lower:]') - ACTOR=$(echo $GITHUB_ACTOR | tr '[:upper:]' '[:lower:]') - GROUP="com.github.$ACTOR.$SAFE_NAME" - - # Replace placeholders in the template-cleanup files - sed -i "s/%NAME%/$NAME/g" .github/template-cleanup/* - sed -i "s/%REPOSITORY%/${GITHUB_REPOSITORY/\//\\/}/g" .github/template-cleanup/* - sed -i "s/%GROUP%/$GROUP/g" .github/template-cleanup/* - - # Replace template package name in project files with $GROUP - find src -type f -exec sed -i "s/org.jetbrains.plugins.template/$GROUP/g" {} + - find src -type f -exec sed -i "s/Template/$NAME/g" {} + - find src -type f -exec sed -i "s/JetBrains/$ACTOR/g" {} + - - # Remove lines marked with #REMOVE-ON-CLEANUP# - find . -type f -exec sed -i '/#REMOVE-ON-CLEANUP#/d' {} + - - # Move content - mkdir -p src/main/kotlin/${GROUP//.//} - cp -R .github/template-cleanup/* . - cp -R src/main/kotlin/org/jetbrains/plugins/template/* src/main/kotlin/${GROUP//.//}/ - - # Cleanup - rm -rf .github/readme - rm -rf .github/template-cleanup - rm -rf src/main/kotlin/org - rm .github/workflows/template-cleanup.yml - rm CODE_OF_CONDUCT.md LICENSE - - # Commit modified files - - name: Commit files - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git add . - git commit -m "Template cleanup" - - # Push changes - - name: Push changes - uses: ad-m/github-push-action@master - with: - branch: main - github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index da553c6..5e30198 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,126 +1,7 @@ -# IntelliJ Platform Plugin Template Changelog +# collections-intellij Changelog ## [Unreleased] -### Changed -- Switch Gradle Wrapper to `-all` to improve the IntelliSense -- Update detekt config to be in line with IJ settings - -## [0.5.1] -### Added -- Missing properties in the `gradle.properties` template file - -### Changed -- Upgrade Gradle Wrapper to `6.7` -- Dependencies - upgrade `org.jetbrains.changelog` to `0.6.2` - -## [0.5.0] -### Added -- Introduced `platformPlugins` property in `gradle.properties` for configuring dependencies to bundled/external plugins - -### Changed -- Disable "Release Draft" job for pull requests in the "Build" GitHub Actions Workflow -- Dependencies - upgrade `org.jetbrains.intellij` to `0.5.0` -- Dependencies - upgrade `org.jetbrains.changelog` to `0.6.1` -- Dependencies - upgrade `io.gitlab.arturbosch.detekt` to `1.14.1` -- Dependencies - upgrade `org.jlleitschuh.gradle.ktlint` to `9.4.1` -- Remove LICENSE file during the Template Cleanup workflow - -## [0.4.0] -### Added -- Fix default to opt-out of bundling Kotlin standard library in plugin distribution - -### Changed -- GitHub Actions: allow releasing plugin even for the base project -- Dependencies - upgrade `org.jetbrains.kotlin.jvm` to `1.4.10` -- Dependencies - upgrade `io.gitlab.arturbosch.detekt` to `1.13.1` - -### Fixed -- `pluginName` variable name collision with `intellij` closure getter in Gradle configuration #29 - -## [0.3.2] -### Changed -- Simplify and optimize GitHub Actions -- Gradle Wrapper upgrade to `6.6.1` -- Dependencies - upgrade `org.jetbrains.kotlin.jvm` to `1.4.0` -- Dependencies - upgrade `org.jetbrains.intellij` to `0.4.22` -- Dependencies - upgrade `org.jetbrains.changelog` to `0.5.0` -- Dependencies - upgrade `io.gitlab.arturbosch.detekt` to `1.12.0` -- Dependencies - upgrade `org.jlleitschuh.gradle.ktlint` to `9.4.0` -- Rename `master` branch to `main` - -### Fixed -- GitHub Actions - cache Gradle dependencies and wrapper separately - -## [0.3.1] -### Added -- Better handling of the Gradle plugin description extraction from the README file -- GitHub Actions - cache Gradle Wrapper - -### Changed -- Gradle - remove kotlin("stdlib-jdk8") dependency to decrease the plugin artifact size -- Dependencies - bump ktlint to `9.3.0` -- GitHub Actions - make *Update Changelog* job dependent on the *Publish Plugin* - -### Fixed -- Resolve ktlint reports - -## [0.3.1] -### Changed -- GitHub Actions - run plugin verifier against `2019.3` `2020.1` `2020.2` - -### Fixed -- GitHub Actions - Plugin Verifier broken for artifacts with whitespaces in name - -## [0.3.0] -### Added -- Set publish channel depending on the plugin version, i.e. `1.0.0-beta` -> `beta` channel - -### Changed -- Update `org.jetbrains.changelog` dependency to `v0.3.3` -- Update Gradle Wrapper to `v6.5.1` -- Run GitHub Actions Release workflow on `prereleased` event -- GitHub Actions - Release - separate changelog related job from the release - -### Fixed -- Remove vendor website from `plugin.xml` -- Update Template Cleanup workflow test to avoid running it on forks - -## [0.2.0] -### Added -- JetBrains Plugin badges and TODO list for the end users -- `ktlint` integration - -### Changed -- `pluginUntilBuild` set to the correct format: `201.*` -- Bump detekt dependency to `1.10.0` - -### Fixed -- GitHub Actions - Template Cleanup - fixed adding files to git -- Update Template plugin name on cleanup -- Set `buildUponDefaultConfig = true` in detekt configuration - -## [0.1.0] -### Added -- `settings.gradle.kts` for the [performance purposes](https://docs.gradle.org/current/userguide/organizing_gradle_projects.html#always_define_a_settings_file) -- `#REMOVE-ON-CLEANUP#` token to mark content to be removed with **Template Cleanup** workflow - -### Changed -- README proofreading -- GitHub Actions - Update IDE versions for the Plugin Verifier -- Update platformVersion to `2020.1.2` - -## [0.0.2] -### Added -- [Gradle Changelog Plugin](https://github.com/JetBrains/gradle-changelog-plugin) integration - -### Changed -- Bump Detekt version -- Change pluginSinceBuild to 193 - -## [0.0.1] ### Added -- Initial project scaffold -- GitHub Actions to automate testing and deployment -- Kotlin support +- Initial scaffold created from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 85ed20d..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,4 +0,0 @@ -## Code of Conduct - -This project and the corresponding community is governed by the [JetBrains Open Source and Community Code of Conduct](https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct). Please make sure you read it. - diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 9e385b9..0000000 --- a/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2000-2020 JetBrains s.r.o. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 402b992..27c572a 100644 --- a/README.md +++ b/README.md @@ -1,266 +1,40 @@ -# IntelliJ Platform Plugin Template +# collections-intellij -[![official JetBrains project](https://jb.gg/badges/official.svg)][jb:confluence-on-gh] -[![Twitter Follow](https://img.shields.io/twitter/follow/JBPlatform?style=flat)][jb:twitter] -[![Build](https://github.com/JetBrains/intellij-platform-plugin-template/workflows/Build/badge.svg)][gh:build] -[![Slack](https://img.shields.io/badge/Slack-%23intellij--platform--plugin--template-blue)][jb:slack] +![Build](https://github.com/olivernybroe/collections-intellij/workflows/Build/badge.svg) +[![Version](https://img.shields.io/jetbrains/plugin/v/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) +[![Downloads](https://img.shields.io/jetbrains/plugin/d/PLUGIN_ID.svg)](https://plugins.jetbrains.com/plugin/PLUGIN_ID) -> **TL;DR:** Click the Use this template button and clone it in IntelliJ IDEA. +## Template ToDo list +- [x] Create a new [IntelliJ Platform Plugin Template][template] project. +- [ ] Verify the [pluginGroup](/gradle.properties), [plugin ID](/src/main/resources/META-INF/plugin.xml) and [sources package](/src/main/kotlin). +- [ ] Review the [Legal Agreements](https://plugins.jetbrains.com/docs/marketplace/legal-agreements.html). +- [ ] [Publish a plugin manually](https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html) for the first time. +- [ ] Set the Plugin ID in the above README badges. +- [ ] Set the [Deployment Token](https://plugins.jetbrains.com/docs/marketplace/plugin-upload.html). +- [ ] Click the Watch button on the top of the [IntelliJ Platform Plugin Template][template] to be notified about releases containing new features and fixes. -**IntelliJ Platform Plugin Template** is a repository that provides a pure boilerplate template to make it easier to create a new plugin project (check the [Creating a repository from a template][gh:template] article). +This Fancy IntelliJ Platform Plugin is going to be your implementation of the brilliant ideas that you have. -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. +This specific section is a source for the [plugin.xml](/src/main/resources/META-INF/plugin.xml) file which will be extracted by the [Gradle](/build.gradle.kts) during the build process. -[gh:template]: https://help.github.com/en/enterprise/2.20/user/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template +To keep everything working, do not remove `` sections. -If you're still not quite sure what this is all about, read our introduction: [What is the IntelliJ Platform?][docs:intro] +## Installation -> **TIP**: Click the Watch button on the top to be notified about releases containing new features and fixes. +- Using IDE built-in plugin system: + + Preferences > Plugins > Marketplace > Search for "collections-intellij" > + Install Plugin + +- Manually: -In this README, we will highlight the following elements of template-project creation: + Download the [latest release](https://github.com/olivernybroe/collections-intellij/releases/latest) and install it manually using + Preferences > Plugins > ⚙️ > Install plugin from disk... -- [Gradle configuration](#gradle-configuration) -- [Plugin template structure](#plugin-template-structure) - - [Dependency on the Kotlin standard library](#dependency-on-the-kotlin-standard-library) -- [Plugin configuration file](#plugin-configuration-file) -- [Sample code](#sample-code): - - listeners – project and dynamic plugin lifecycle - - services – project-related and application-related services - - actions – basic action with shortcut binding -- [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 -- [Useful links](#useful-links) -## Getting started +--- +Plugin based on the [IntelliJ Platform Plugin Template][template]. -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, clone repositories, or clear the history manually. - -All you have to do is click the Use this template button. - -![Use this template][file:use-this-template.png] - -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]. - -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. - -## Gradle configuration - -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 publish your plugin to the Marketplace Repository. - -A project built using the IntelliJ Platform Plugin Template includes a Gradle configuration that's already been set up. Feel free to read through the [Using Gradle][docs:using-gradle] articles to better understand your build and learn how to customize it. - -The most significant parts of the current configuration are: -- 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. - -The project-specific configuration file [gradle.properties][file:gradle.properties] contains: - -| Property name | Description | -| ------------------------- | --------------------------------------------------------------------------------------------------------- | -| `pluginGroup` | Package name - after *using* the template, this will be set to `com.github.username.repo`. | -| `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 tag. | -| `pluginUntilBuild` | The `until-build` attribute of the tag. | -| `platformType` | The type of IDE distribution. | -| `platformVersion` | The version of the IntelliJ Platform IDE that will be used to build the plugin. | -| `platformDownloadSources` | IDE sources downloaded while initializing the Gradle build. | -| `platformPlugins` | Comma-separated list of dependencies to the bundled IDE plugins and plugins from the Plugin Repositories. | - -The properties listed define the plugin itself or configure the [gradle-intellij-plugin][gh:gradle-intellij-plugin] – check its documentation for more details. - -### Dependency on the Kotlin standard library - -Since Kotlin 1.4, a dependency on a standard library (`stdlib`) is added automatically. -In most cases, it is not necessary to distribute this library with a plugin. - -The [gradle.properties][file:gradle.properties] file explicitly alters the default behaviour of the Kotlin Gradle plugin by specifying this opt-out property: - -``` -kotlin.stdlib.default.dependency = false -``` - -For more details, please see: [Dependency on the standard library][kotlin-docs-dependency-on-stdlib] in Kotlin documentation. - -## Plugin template structure - -A generated IntelliJ Platform Plugin Template repository contains the following content structure: - -``` -. -├── CHANGELOG.md Full change history. -├── LICENSE License, MIT by default -├── README.md README -├── build/ Output build directory -├── build.gradle.kts Gradle configuration -├── detekt-config.yml Detekt configuration -├── gradle -│ └── wrapper/ Gradle Wrapper -├── gradle.properties Gradle configuration properties -├── gradlew *nix Gradle Wrapper binary -├── gradlew.bat Windows Gradle Wrapper binary -└── src Plugin sources - └── main - ├── kotlin/ Kotlin source files - ├── java/ Java source files - └── resources/ Resources - plugin.xml, icons, messages -``` - -In addition to the configuration files, the most crucial part is the `src` directory, which contains our implementation and the manifest for our plugin – [plugin.xml][file:plugin.xml]. - -## Plugin configuration file -The plugin configuration file is a [plugin.xml][file:plugin.xml] file located in the `src/main/resources/META-INF` directory. It provides general information about the plugin, its dependencies, extensions, and listeners. - -```xml - - org.jetbrains.plugins.template - Template - JetBrains - com.intellij.modules.platform - - - - - - - - - - -``` - -You can read more about this file in the [IntelliJ Platform SDK DevGuide][docs:plugin.xml]. - -## Sample code - -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: - -``` -. -├── MyBundle.kt Bundle class providing access to the resources messages -├── listeners -│ └── MyProjectManagerListener.kt Project Manager listener - handles project lifecycle -└── services - ├── MyApplicationService.kt Application-level service available for all projects - └── MyProjectService.kt Project level service -``` - -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. - -## Continuous integration - -Continuous integration depends on [GitHub Actions][gh:actions], a set of workflows that make it possible 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). - -In the `.github/workflows` directory, you can find definitions for the following GitHub Actions workflows: - -- [Build](.github/workflows/build.yml) - - 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. -- [Release](.github/workflows/release.yml) - - Triggered on `released` event. - - Publishes the plugin to the Marketplace using the provided `PUBLISH_TOKEN`. - - Sets publish channel depending on the plugin version, i.e. `1.0.0-beta` -> `beta` channel. - - Patches the Changelog and commits. -- [Template Cleanup](.github/workflows/template-cleanup.yml) - - Triggered once on the `push` event when a new template-based repository has been created. - - Overrides the scaffold with files from the `.github/template-cleanup` directory. - - Overrides JetBrains-specific sentences or package names with ones specific to the target repository. - - Removes redundant files. - -All the workflow files have accurate documentation, so it's a good idea to take a look through their sources. - -### Changelog maintenance - -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. - -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, the [Releases page][gh:releases], the *What's new* section of the Marketplace Plugin page, and inside of the Plugin Manager's item details. - -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. - -### Release flow - -The release process depends on the workflows already described above. When your main branch receives a new pull request or a regular push, the [Build](.github/workflows/build.yml) workflow runs multiple tests on your plugin and prepares a draft release. - -![Release draft][file:draft-release.png] - -The draft release is a working copy of a release, which you can review before publishing. It includes a predefined title and git tag, which is the current version of the plugin, for example, `v0.0.1`. The changelog is provided automatically using the [gradle-changelog-plugin][gh:gradle-changelog-plugin]. An artifact file is also built with the plugin attached. Every new Build overrides the previous draft to keep your *Releases* page clean. - -When you edit the draft and use the Publish release 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. - -### Publishing the plugin - -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. - -> **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]. - -The authorization process relies on the `PUBLISH_TOKEN` secret environment variable, which has to be acquired through the Secrets section of the repository Settings. - -![Settings > Secrets][file:settings-secrets.png] - -You can get that token in the [My Tokens][jb:my-tokens] tab within your Marketplace profile dashboard. - -> **Important:** -> 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. - -## Useful links - -- [IntelliJ Platform SDK DevGuide][docs] -- [IntelliJ Platform UI Guidelines][jb:ui-guidelines] -- [Kotlin UI DSL][docs:kotlin-ui-dsl] -- [IntelliJ SDK Code Samples][gh:code-samples] -- [JetBrains Platform Slack][jb:slack] -- [JetBrains Platform Twitter][jb:twitter] -- [IntelliJ IDEA Open API and Plugin Development Forum][jb:forum] -- [Keep a Changelog][keep-a-changelog] -- [GitHub Actions][gh:actions] - -[docs]: https://www.jetbrains.org/intellij/sdk/docs -[docs:intro]: https://www.jetbrains.org/intellij/sdk/docs/intro/intellij_platform.html -[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 -[docs:publishing]: https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html -[docs:release-channel]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/deployment.html#specifying-a-release-channel -[docs:using-gradle]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system.html - -[file:use-this-template.png]: .github/readme/use-this-template.png -[file:draft-release.png]: .github/readme/draft-release.png -[file:gradle.properties]: ./gradle.properties -[file:plugin.xml]: ./src/main/resources/META-INF/plugin.xml -[file:settings-secrets.png]: .github/readme/settings-secrets.png -[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 -[gh:build]: https://github.com/JetBrains/intellij-platform-plugin-template/actions?query=workflow%3ABuild - -[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:my-tokens]: https://plugins.jetbrains.com/author/me/tokens -[jb:slack]: https://plugins.jetbrains.com/slack -[jb:ui-guidelines]: https://jetbrains.github.io/ui -[jb:twitter]: https://twitter.com/JBPlatform - -[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 -[kotlin-docs-dependency-on-stdlib]: https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library +[template]: https://github.com/JetBrains/intellij-platform-plugin-template diff --git a/gradle.properties b/gradle.properties index d02067a..54b0124 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ # IntelliJ Platform Artifacts Repositories # -> https://www.jetbrains.org/intellij/sdk/docs/reference_guide/intellij_artifacts.html -pluginGroup = org.jetbrains.plugins.template -pluginName_ = IntelliJ Platform Plugin Template -pluginVersion = 0.5.1 +pluginGroup = com.github.olivernybroe.collectionsintellij +pluginName_ = collections-intellij +pluginVersion = 0.0.1 pluginSinceBuild = 193 pluginUntilBuild = 202.* diff --git a/settings.gradle.kts b/settings.gradle.kts index 8ada61f..d877852 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1 @@ -rootProject.name = "IntelliJ Platform Plugin Template" +rootProject.name = "collections-intellij" diff --git a/src/main/kotlin/org/jetbrains/plugins/template/MyBundle.kt b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/MyBundle.kt similarity index 91% rename from src/main/kotlin/org/jetbrains/plugins/template/MyBundle.kt rename to src/main/kotlin/com/github/olivernybroe/collectionsintellij/MyBundle.kt index 19e949e..f640f03 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/MyBundle.kt +++ b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/MyBundle.kt @@ -1,4 +1,4 @@ -package org.jetbrains.plugins.template +package com.github.olivernybroe.collectionsintellij import com.intellij.AbstractBundle import org.jetbrains.annotations.NonNls diff --git a/src/main/kotlin/org/jetbrains/plugins/template/listeners/MyProjectManagerListener.kt b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/listeners/MyProjectManagerListener.kt similarity index 67% rename from src/main/kotlin/org/jetbrains/plugins/template/listeners/MyProjectManagerListener.kt rename to src/main/kotlin/com/github/olivernybroe/collectionsintellij/listeners/MyProjectManagerListener.kt index 5379d3a..ae1c69e 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/listeners/MyProjectManagerListener.kt +++ b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/listeners/MyProjectManagerListener.kt @@ -1,8 +1,8 @@ -package org.jetbrains.plugins.template.listeners +package com.github.olivernybroe.collectionsintellij.listeners import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManagerListener -import org.jetbrains.plugins.template.services.MyProjectService +import com.github.olivernybroe.collectionsintellij.services.MyProjectService internal class MyProjectManagerListener : ProjectManagerListener { diff --git a/src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyApplicationService.kt b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyApplicationService.kt new file mode 100644 index 0000000..2964c2f --- /dev/null +++ b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyApplicationService.kt @@ -0,0 +1,10 @@ +package com.github.olivernybroe.collectionsintellij.services + +import com.github.olivernybroe.collectionsintellij.MyBundle + +class MyApplicationService { + + init { + println(MyBundle.message("applicationService")) + } +} diff --git a/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyProjectService.kt similarity index 59% rename from src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt rename to src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyProjectService.kt index df4b01f..ddbbdb9 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt +++ b/src/main/kotlin/com/github/olivernybroe/collectionsintellij/services/MyProjectService.kt @@ -1,7 +1,7 @@ -package org.jetbrains.plugins.template.services +package com.github.olivernybroe.collectionsintellij.services import com.intellij.openapi.project.Project -import org.jetbrains.plugins.template.MyBundle +import com.github.olivernybroe.collectionsintellij.MyBundle class MyProjectService(project: Project) { diff --git a/src/main/kotlin/org/jetbrains/plugins/template/services/MyApplicationService.kt b/src/main/kotlin/org/jetbrains/plugins/template/services/MyApplicationService.kt deleted file mode 100644 index 2997c27..0000000 --- a/src/main/kotlin/org/jetbrains/plugins/template/services/MyApplicationService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.jetbrains.plugins.template.services - -import org.jetbrains.plugins.template.MyBundle - -class MyApplicationService { - - init { - println(MyBundle.message("applicationService")) - } -} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 18c852d..fb01b08 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,19 +1,19 @@ - org.jetbrains.plugins.template - Template - JetBrains + com.github.olivernybroe.collectionsintellij + collections-intellij + olivernybroe com.intellij.modules.platform - - + + -