diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae07e9d..9e59610 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,12 +1,12 @@ -# GitHub Actions Workflow created for testing and preparing the plugin release in following steps: -# - validate Gradle Wrapper, -# - run 'test' and 'verifyPlugin' tasks, -# - run Qodana inspections, -# - run 'buildPlugin' task and prepare artifact for the further tests, -# - run 'runPluginVerifier' task, -# - create a draft release. +# GitHub Actions Workflow is created for testing and preparing the plugin release in the following steps: +# - Validate Gradle Wrapper. +# - Run 'test' and 'verifyPlugin' tasks. +# - Run Qodana inspections. +# - Run the 'buildPlugin' task and prepare artifact for further tests. +# - Run the 'runPluginVerifier' task. +# - Create a draft release. # -# Workflow is triggered on push and pull_request events. +# The workflow is triggered on push and pull_request events. # # GitHub Actions reference: https://help.github.com/en/actions # @@ -14,41 +14,49 @@ name: Build on: - # Trigger the workflow on pushes to only the 'main' branch (this avoids duplicate checks being run e.g. for dependabot pull requests) + # Trigger the workflow on pushes to only the 'main' branch (this avoids duplicate checks being run e.g., for dependabot pull requests) push: - branches: [main] + branches: [ main, develop ] # Trigger the workflow on any pull request pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: - - # Run Gradle Wrapper Validation Action to verify the wrapper's checksum - # Run verifyPlugin, IntelliJ Plugin Verifier, and test Gradle tasks - # Build plugin and provide the artifact for the next workflow jobs + + # Prepare environment and build the plugin build: name: Build runs-on: ubuntu-latest outputs: version: ${{ steps.properties.outputs.version }} changelog: ${{ steps.properties.outputs.changelog }} + pluginVerifierHomeDir: ${{ steps.properties.outputs.pluginVerifierHomeDir }} steps: - + # Check out current repository - name: Fetch Sources - uses: actions/checkout@v2.4.0 - + uses: actions/checkout@v4 + # Validate wrapper - name: Gradle Wrapper Validation - uses: gradle/wrapper-validation-action@v1.0.4 - - # Setup Java 11 environment for the next steps + uses: gradle/wrapper-validation-action@v2 + + # Set up Java environment for the next steps - name: Setup Java - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: distribution: zulu - java-version: 11 - cache: gradle - + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-home-cache-cleanup: true + # Set environment variables - name: Export Properties id: properties @@ -56,53 +64,21 @@ jobs: run: | PROPERTIES="$(./gradlew properties --console=plain -q)" VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" - NAME="$(echo "$PROPERTIES" | grep "^pluginName:" | cut -f2- -d ' ')" CHANGELOG="$(./gradlew getChangelog --unreleased --no-header --console=plain -q)" - CHANGELOG="${CHANGELOG//'%'/'%25'}" - CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" - CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" - echo "::set-output name=version::$VERSION" - echo "::set-output name=name::$NAME" - echo "::set-output name=changelog::$CHANGELOG" - echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier" + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "pluginVerifierHomeDir=~/.pluginVerifier" >> $GITHUB_OUTPUT + + echo "changelog<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT ./gradlew listProductsReleases # prepare list of IDEs for Plugin Verifier - - # Run tests - - name: Run Tests - run: ./gradlew test - - # Collect Tests Result of failed tests - - name: Collect Tests Result - if: ${{ failure() }} - uses: actions/upload-artifact@v2 - with: - name: tests-result - path: ${{ github.workspace }}/build/reports/tests - - # # Cache Plugin Verifier IDEs - # - name: Setup Plugin Verifier IDEs Cache - # uses: actions/cache@v2.1.7 - # with: - # path: ${{ steps.properties.outputs.pluginVerifierHomeDir }}/ides - # key: plugin-verifier-${{ hashFiles('build/listProductsReleases.txt') }} - # - # # Run Verify Plugin task and IntelliJ Plugin Verifier tool - # - name: Run Plugin Verification tasks - # run: ./gradlew runPluginVerifier -Pplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }} - # - # # Collect Plugin Verifier Result - # - name: Collect Plugin Verifier Result - # if: ${{ always() }} - # uses: actions/upload-artifact@v2 - # with: - # name: pluginVerifier-result - # path: ${{ github.workspace }}/build/reports/pluginVerifier - - # TODO: temp needed because verifier disabled - - run: ./gradlew buildPlugin - + + # Build plugin + - name: Build plugin + run: ./gradlew buildPlugin + # Prepare plugin archive content for creating artifact - name: Prepare Plugin Artifact id: artifact @@ -112,29 +88,81 @@ jobs: FILENAME=`ls *.zip` unzip "$FILENAME" -d content - echo "::set-output name=filename::${FILENAME:0:-4}" - + echo "filename=${FILENAME:0:-4}" >> $GITHUB_OUTPUT + # Store already-built plugin as an artifact for downloading - name: Upload artifact - uses: actions/upload-artifact@v2.2.4 + uses: actions/upload-artifact@v4 with: name: ${{ steps.artifact.outputs.filename }} path: ./build/distributions/content/*/* - + + # Run plugin structure verification along with IntelliJ Plugin Verifier + verify: + name: Verify plugin + needs: [ build ] + runs-on: ubuntu-latest + steps: + + # Free GitHub Actions Environment Disk Space + - name: Maximize Build Space + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + large-packages: false + + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v4 + + # Set up Java environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-home-cache-cleanup: true + + # Cache Plugin Verifier IDEs + - name: Setup Plugin Verifier IDEs Cache + uses: actions/cache@v4 + with: + path: ${{ needs.build.outputs.pluginVerifierHomeDir }}/ides + key: plugin-verifier-${{ hashFiles('build/listProductsReleases.txt') }} + + # Run Verify Plugin task and IntelliJ Plugin Verifier tool + - name: Run Plugin Verification tasks + run: ./gradlew runPluginVerifier -Dplugin.verifier.home.dir=${{ needs.build.outputs.pluginVerifierHomeDir }} + + # Collect Plugin Verifier Result + - name: Collect Plugin Verifier Result + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: pluginVerifier-result + path: ${{ github.workspace }}/build/reports/pluginVerifier + # Prepare a draft release for GitHub Releases page for the manual verification # If accepted and published, release workflow would be triggered releaseDraft: - name: Release Draft + name: Release draft if: github.event_name != 'pull_request' - needs: build + needs: [ build, test, inspectCode, verify ] runs-on: ubuntu-latest + permissions: + contents: write steps: - + # Check out current repository - name: Fetch Sources - uses: actions/checkout@v2.4.0 - - # Remove old release drafts by using the curl request for the available releases with draft flag + uses: actions/checkout@v4 + + # Remove old release drafts by using the curl request for the available releases with a draft flag - name: Remove Old Release Drafts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -142,13 +170,13 @@ jobs: gh api repos/{owner}/{repo}/releases \ --jq '.[] | select(.draft == true) | .id' \ | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} - - # Create new release draft - which is not publicly visible and requires manual acceptance + + # Create a new release draft which is not publicly visible and requires manual acceptance - name: Create Release Draft env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release create v${{ needs.build.outputs.version }} \ + gh release create "v${{ needs.build.outputs.version }}" \ --draft \ --title "v${{ needs.build.outputs.version }}" \ --notes "$(cat << 'EOM' diff --git a/.run/Run IDE with Plugin.run.xml b/.run/Run Plugin.run.xml similarity index 90% rename from .run/Run IDE with Plugin.run.xml rename to .run/Run Plugin.run.xml index ddd22ad..d15ff68 100644 --- a/.run/Run IDE with Plugin.run.xml +++ b/.run/Run Plugin.run.xml @@ -5,7 +5,7 @@ @@ -19,7 +19,6 @@ true true false - false \ No newline at end of file diff --git a/.run/Run Qodana.run.xml b/.run/Run Qodana.run.xml deleted file mode 100644 index 17b041a..0000000 --- a/.run/Run Qodana.run.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - true - true - false - - - \ No newline at end of file diff --git a/.run/Run Plugin Tests.run.xml b/.run/Run Tests.run.xml similarity index 92% rename from .run/Run Plugin Tests.run.xml rename to .run/Run Tests.run.xml index 9dc888c..f281bdc 100644 --- a/.run/Run Plugin Tests.run.xml +++ b/.run/Run Tests.run.xml @@ -11,7 +11,7 @@