Skip to content

ChrisCarini/intellij-platform-plugin-verifier-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

69 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

IntelliJ Platform Plugin Verifier Action

A GitHub Action for executing the JetBrains intellij-plugin-verifier.

GitHub Marketplace GitHub Marketplace GitHub Marketplace All Contributors

Usage

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

Installation

  1. Create a .yml (or .yaml) file in your GitHub repository's .github/workflows folder. We will call this file compatibility.yml below.
  2. 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}}

GitHub Token Authentication

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.

Options

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

verifier-version

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:

  1. intellij-plugin-verifier version 1.255 or later

    AND

  2. intellij-platform-plugin-verifier-action version 2.0.0 or later

plugin-location

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).

ide-versions

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.

  1. Navigate to the IntelliJ 'Releases' Repository
  2. Find the IDE and version you wish to use.
  3. Copy the URL for the .zip.
  4. Take only the .zip filename from the URL; example below:
    https://www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/pycharm/pycharmPY/2019.3/pycharmPY-2019.3.zip
    
    becomes
    pycharmPY-2019.3.zip
    
  5. Replace the - with a :, and remove the .zip from the end; example below:
    pycharmPY-2019.3.zip
    
    becomes
    pycharmPY:2019.3
    
  6. This is the value you will use in ide-versions.

Some <ide> options

  • CLion = clion
  • GoLand = goland
  • IntelliJ IDEA
    • IntelliJ IDEA Community = ideaIC
    • IntelliJ IDEA Ultimate = ideaIU
  • PyCharm
    • PyCharm Community = pycharmPC
    • PyCharm Professional = pycharmPY
  • Rider = riderRD

Some <version> options

  • 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
  • Latest EAP version (ie, LATEST-EAP-SNAPSHOT)

Configuration file for <ide>:<version>

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.)

failure-levels

This required input sets which plugin verifier failures to cause a failure in this action.

Valid options

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.

mute-plugin-problems

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.

Valid options

- `ForbiddenPluginIdPrefix`
- `TemplateWordInPluginId`
- `TemplateWordInPluginName`

Results

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.)

Examples

As examples of using this plugin you can check out following projects:

Contributing

Contributions welcomed! Feel free to open a PR, or issue.

Contributors

Chris Carini
Chris Carini

πŸ› πŸ’» πŸ“– πŸ’‘ πŸ€” 🚧 πŸ’¬ πŸ‘€
Peter Lin
Peter Lin

πŸ› πŸ’» πŸ€” πŸ““
takanuva15
takanuva15

πŸ› πŸ’» πŸš‡ 🚧
Dmitry
Dmitry

πŸ› πŸ’» πŸš‡ 🚧 πŸ““
Yann CΓ©bron
Yann CΓ©bron

πŸ› πŸ€” 🚧
Sergei Patrikeev
Sergei Patrikeev

πŸš‡ 🚧
Jakub Chrzanowski
Jakub Chrzanowski

πŸ€” πŸš‡ 🚧
Dominik Wojciechowski
Dominik Wojciechowski

πŸ€”
Filip Hrisafov
Filip Hrisafov

πŸ›
Patrick Scheibe
Patrick Scheibe

πŸ› πŸ€”
Alex Simons
Alex Simons

πŸ›
glex85
glex85

πŸ› πŸ““
Etan Shaul
Etan Shaul

πŸ€”
Yann
Yann

πŸ› πŸ’»
Drew Brokke
Drew Brokke

πŸ’» πŸ“–

Debugging

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.