A GitHub Action for executing the JetBrains intellij-plugin-verifier.
Add the action to your GitHub Action Workflow file - the only thing you need to specify are the JetBrains products & versions you wish to run against.
A minimal example of a workflow step is below:
- name: Verify Plugin on IntelliJ Platforms
uses: ChrisCarini/intellij-platform-plugin-verifier-action@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
ide-versions: |
ideaIC:2019.3
- Create a
.yml
(or.yaml
) file in your GitHub repository's.github/workflows
folder. We will call this filecompatibility.yml
below. - Copy the below contents into
compatibility.yml
name: IntelliJ Platform Plugin Compatibility on: push: jobs: compatibility: name: Ensure plugin compatibility against 2019.3 for IDEA Community, IDEA Ultimate, PyCharm Community, GoLand, CLion, and the latest EAP snapshot of IDEA Community. runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v1 - name: Setup Java 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build the plugin using Gradle run: ./gradlew buildPlugin - name: Verify Plugin on IntelliJ Platforms id: verify uses: ChrisCarini/intellij-platform-plugin-verifier-action@latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: ide-versions: | ideaIC:2019.3 ideaIU:2019.3 pycharmPC:2019.3 goland:2019.3 clion:2019.3 ideaIC:LATEST-EAP-SNAPSHOT - name: Get log file path and print contents run: | echo "The verifier log file [${{steps.verify.outputs.verification-output-log-filename}}] contents : " ; cat ${{steps.verify.outputs.verification-output-log-filename}}
In order to
prevent GitHub Rate limiting,
setting the GITHUB_TOKEN
environment variable is highly encouraged.
Without the GITHUB_TOKEN
set, the requests are considered 'unauthenticated requests' by the GitHub API, and are
subject to 60 requests per hour for the originating IP
address. GitHub-hosted runners are hosted in Azure, and have the same IP address ranges as Azure datacenters.
As a side effect of this, if the particular IP address of the GitHub-runner executing your GitHub Workflow has made 60
requests per hour, the API call to resolve the latest version of the intellij-plugin-verifier
will fail, and this
action will not complete successfully.
With the GITHUB_TOKEN
set, each repository using this GitHub action will be allowed 1,000 requests per hour
(which is needed to resolve the latest version of the intellij-plugin-verifier
). This should be ample for most
repositories.
This GitHub Action exposes 3 input options, only one of which is required.
Input | Description | Usage | Default |
---|---|---|---|
verifier-version |
The version of the JetBrains intellij-plugin-verifier. The default of LATEST will automatically pull the most recently released version from GitHub - a specific version of the intellij-plugin-verifier can be optionally be pinned if desired. |
Optional | LATEST |
plugin-location |
The path to the zip -distribution of the plugin(s), generated by executing ./gradlew buildPlugin |
Optional | build/distributions/*.zip |
ide-versions |
Releases of IntelliJ Platform IDEs and versions that should be used to validate against, formatted as a multi-line string as shown in the examples. Formatted as <ide>:<version> - see below for details. If you would prefer to have the list of IDE and versions stored in a file, see the Configuration file for <ide>:<version> section below for details. |
Required | |
failure-levels |
The different failure levels to set for the verifier. | Required | COMPATIBILITY_PROBLEMS INVALID_PLUGIN |
An example using all the available options is below:
- name: Verify Plugin on IntelliJ Platforms
id: verify
uses: ChrisCarini/intellij-platform-plugin-verifier-action@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
verifier-version: '1.255'
plugin-location: 'build/distributions/sample-intellij-plugin-*.zip'
ide-versions: |
ideaIC:LATEST-EAP-SNAPSHOT
failure-levels: |
COMPATIBILITY_PROBLEMS
INVALID_PLUGIN
NOT_DYNAMIC
This optional input allows users to pin a specific version of intellij-plugin-verifier
to be used during validation.
WARNING: Due to the deprecation fo Bintray services on 2021-05-01, JetBrains moved the verifier artifacts to their own
Maven repository (
See intellij-plugin-verifier
version 1.255
release notes
for details.). If you wish to specify a verifier-version
in this GitHub Action, please ensure you are using both:
-
intellij-plugin-verifier
version1.255
or laterAND
-
intellij-platform-plugin-verifier-action
version2.0.0
or later
This optional input allows users to specify a different location for the plugin(s) .zip
file. The default
assumes that gradle-intellij-plugin is being used to build
the plugin(s).
This required input sets which IDEs and versions the plugins will be validated against.
You can identify the value for <ide>
and <version>
as follows.
- Navigate to the IntelliJ 'Releases' Repository
- Note: If you wish to find a snapshot of an IDE, please use the IntelliJ 'Snapshots' Repository.
- Find the IDE and version you wish to use.
- Copy the URL for the
.zip
. - Take only the
.zip
filename from the URL; example below:becomeshttps://www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/pycharm/pycharmPY/2019.3/pycharmPY-2019.3.zip
pycharmPY-2019.3.zip
- Replace the
-
with a:
, and remove the.zip
from the end; example below:becomespycharmPY-2019.3.zip
pycharmPY:2019.3
- This is the value you will use in
ide-versions
.
- CLion =
clion
- GoLand =
goland
- IntelliJ IDEA
- IntelliJ IDEA Community =
ideaIC
- IntelliJ IDEA Ultimate =
ideaIU
- IntelliJ IDEA Community =
- PyCharm
- PyCharm Community =
pycharmPC
- PyCharm Professional =
pycharmPY
- PyCharm Community =
- Rider =
riderRD
- Major versions (ie,
2019.3
) - Minor versions (ie,
2019.3.4
) - Specific build versions (ie,
193.6911.18
) SNAPSHOT
versions- versions ending in
*-SNAPSHOT
- versions ending in
*-EAP-SNAPSHOT
- versions ending in
*-EAP-CANDIDATE-SNAPSHOT
- versions ending in
*-CUSTOM-SNAPSHOT
- versions ending in
- Latest EAP version (ie,
LATEST-EAP-SNAPSHOT
)
If you would like to keep your GitHub Action workflow file tidy and free from constant changes, you can pass a relative file path to a file containing the IDE and versions. Below are the respective excerpts to use this feature.
Workflow File:
- uses: actions/checkout@v2 # Your repository must be checked out in order to access the `ide_versions_file.txt` configuration file.
- name: Verify plugin on IntelliJ Platforms
id: verify
uses: ChrisCarini/intellij-platform-plugin-verifier-action@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
ide-versions: .github/workflows/ide_versions_file.txt
.github/workflows/ide_versions_file.txt
ideaIC:2019.3
ideaIU:2019.3
pycharmPC:2019.3
goland:2019.3
clion:2019.3
ideaIC:LATEST-EAP-SNAPSHOT
(Note: The sample above will yield an execution identical to the one provided in the Installation
section above.)
This required input sets which plugin verifier failures to cause a failure in this action.
Value | Search String |
---|---|
COMPATIBILITY_WARNINGS | "Compatibility warnings" |
COMPATIBILITY_PROBLEMS | "Compatibility problems" |
DEPRECATED_API_USAGES | "Deprecated API usages" |
EXPERIMENTAL_API_USAGES | "Experimental API usages" |
INTERNAL_API_USAGES | "Internal API usages" |
OVERRIDE_ONLY_API_USAGES | "Override-only API usages" |
NON_EXTENDABLE_API_USAGES | "Non-extendable API usages" |
PLUGIN_STRUCTURE_WARNINGS | "Plugin structure warnings" |
MISSING_DEPENDENCIES | "Missing dependencies" |
INVALID_PLUGIN | "The following files specified for the verification are not valid plugins" |
NOT_DYNAMIC | "Plugin cannot be loaded/unloaded without IDE restart" |
Note: The default values are COMPATIBILITY_PROBLEMS
and INVALID_PLUGIN
for backwards compatibility. These were
the two default checks as of authoring this capability. This may change in the future, but a minor version bump (at a
minimum) will happen should that occur.
This optional input sets which plugins problems will be ignored. Multiple values can be passed in as a comma-separated string.
See https://github.com/JetBrains/intellij-plugin-verifier?tab=readme-ov-file#check-plugin for more details.
- `ForbiddenPluginIdPrefix`
- `TemplateWordInPluginId`
- `TemplateWordInPluginName`
The results of the execution are captured in a file for use in subsequent steps if you so choose.
You will need to give the intellij-platform-plugin-verifier-action
step an id
.
You can then access the verifier output file by using ${{steps.<id>.outputs.verification-output-log-filename}}
.
In the below example, we use set the id
to verify
- this example will print the filename as well as the contents of the file as a subsequent step to the validation:
- name: Verify Plugin on IntelliJ Platforms
id: verify
uses: ChrisCarini/intellij-platform-plugin-verifier-action@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
ide-versions: |
ideaIC:2019.3
- name: Get log file path and print contents
run: |
echo "The verifier log file [${{steps.verify.outputs.verification-output-log-filename}}] contents : " ;
cat ${{steps.verify.outputs.verification-output-log-filename}}
(Note: The file contents will include both stdout
and stderr
output from the plugin verification CLI.)
As examples of using this plugin you can check out following projects:
- Automatic Power Saver - Automatically enable / disable power save mode on window focus changes.
- Environment Variable Settings Summary - Provides all system environment variables for troubleshooting.
- Logshipper - Ship your IDE logs to a logstash service.
- intellij-sample-notification - Displays a simple notification upon Project Open.
Contributions welcomed! Feel free to open a PR, or issue.
This action has GitHub Actions Debug Logging.
To enable, set the following secret in the repository that contains the workflow using this action to true
.
ACTIONS_STEP_DEBUG
You can find this under the repositories Settings -> Secrets
menu.