From 07fe8661cd61d03a3b2c4366639507d16b364680 Mon Sep 17 00:00:00 2001 From: AprilViolet Date: Sun, 12 Sep 2021 10:11:38 +0800 Subject: [PATCH 1/2] :recycle: refactor(upgrade template to v1.0.0): --- .github/workflows/build.yml | 177 ++++++++--------------------- .github/workflows/release.yml | 21 ++-- .github/workflows/run-ui-tests.yml | 60 ++++++++++ .gitignore | 1 + .run/Run Plugin Tests.run.xml | 4 +- build.gradle.kts | 73 +++++++----- detekt-config.yml | 5 - gradle.properties | 9 +- qodana.yml | 6 + 9 files changed, 179 insertions(+), 177 deletions(-) create mode 100644 .github/workflows/run-ui-tests.yml delete mode 100644 detekt-config.yml create mode 100644 qodana.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6fddbbb..da3618f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,39 +44,52 @@ jobs: runs-on: ubuntu-latest steps: + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v2.3.4 + # Setup Java 11 environment for the next steps - name: Setup Java uses: actions/setup-java@v2 with: distribution: zulu java-version: 11 + cache: gradle - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2.3.4 + # Set environment variables + - name: Export Properties + id: properties + shell: bash + run: | + PROPERTIES="$(./gradlew properties --console=plain -q)" + IDE_VERSIONS="$(echo "$PROPERTIES" | grep "^pluginVerifierIdeVersions:" | base64)" - # Cache Gradle dependencies - - name: Setup Gradle Dependencies Cache - uses: actions/cache@v2.1.6 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} + echo "::set-output name=ideVersions::$IDE_VERSIONS" + echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier" - # Cache Gradle Wrapper - - name: Setup Gradle Wrapper Cache + # Cache Plugin Verifier IDEs + - name: Setup Plugin Verifier IDEs Cache uses: actions/cache@v2.1.6 with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} + path: ${{ steps.properties.outputs.pluginVerifierHomeDir }}/ides + key: ${{ runner.os }}-plugin-verifier-${{ steps.properties.outputs.ideVersions }} + + # Run Qodana inspections + - name: Qodana - Code Inspection + uses: JetBrains/qodana-action@v2.1-eap - # Run detekt, ktlint and tests - - name: Run Linters and Test - run: ./gradlew check + # Run tests + - name: Run Tests + run: ./gradlew test # Run verifyPlugin Gradle task - name: Verify Plugin run: ./gradlew verifyPlugin + # Run IntelliJ Plugin Verifier action using GitHub Action + - name: Run Plugin Verifier + run: ./gradlew runPluginVerifier -Pplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }} + # Build plugin with buildPlugin Gradle task and provide the artifact for the next workflow jobs # Requires test job to be passed build: @@ -84,36 +97,21 @@ jobs: needs: test runs-on: ubuntu-latest outputs: - name: ${{ steps.properties.outputs.name }} version: ${{ steps.properties.outputs.version }} changelog: ${{ steps.properties.outputs.changelog }} - artifact: ${{ steps.properties.outputs.artifact }} steps: + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v2.3.4 + # Setup Java 11 environment for the next steps - name: Setup Java uses: actions/setup-java@v2 with: distribution: zulu java-version: 11 - - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2.3.4 - - # Cache Gradle Dependencies - - name: Setup Gradle Dependencies Cache - uses: actions/cache@v2.1.6 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} - - # Cache Gradle Wrapper - - name: Setup Gradle Wrapper Cache - uses: actions/cache@v2.1.6 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} + cache: gradle # Set environment variables - name: Export Properties @@ -127,85 +125,28 @@ jobs: CHANGELOG="${CHANGELOG//'%'/'%25'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" - ARTIFACT="${NAME}-${VERSION}.zip" echo "::set-output name=version::$VERSION" echo "::set-output name=name::$NAME" echo "::set-output name=changelog::$CHANGELOG" - echo "::set-output name=artifact::$ARTIFACT" # Build artifact using buildPlugin Gradle task - name: Build Plugin run: ./gradlew buildPlugin - # Upload plugin artifact to make it available in the next jobs - - name: Upload artifact - uses: actions/upload-artifact@v2.2.3 + # Store built plugin as an artifact for downloading + - name: Upload artifacts + uses: actions/upload-artifact@v2.2.4 with: - name: plugin-artifact - path: ./build/distributions/${{ steps.properties.outputs.artifact }} - - # Verify built plugin using IntelliJ Plugin Verifier tool - # Requires build job to be passed - verify: - name: Verify - needs: build - runs-on: ubuntu-latest - steps: - - # Setup Java 11 environment for the next steps - - name: Setup Java - uses: actions/setup-java@v2 - with: - distribution: zulu - java-version: 11 - - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2.3.4 - - # Cache Gradle Dependencies - - name: Setup Gradle Dependencies Cache - uses: actions/cache@v2.1.6 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} - - # Cache Gradle Wrapper - - name: Setup Gradle Wrapper Cache - uses: actions/cache@v2.1.6 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} - - # Set environment variables - - name: Export Properties - id: properties - shell: bash - run: | - PROPERTIES="$(./gradlew properties --console=plain -q)" - IDE_VERSIONS="$(echo "$PROPERTIES" | grep "^pluginVerifierIdeVersions:" | base64)" - - echo "::set-output name=ideVersions::$IDE_VERSIONS" - echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier" - - # Cache Plugin Verifier IDEs - - name: Setup Plugin Verifier IDEs Cache - uses: actions/cache@v2.1.6 - with: - path: ${{ steps.properties.outputs.pluginVerifierHomeDir }}/ides - key: ${{ runner.os }}-plugin-verifier-${{ steps.properties.outputs.ideVersions }} - - # Run IntelliJ Plugin Verifier action using GitHub Action - - name: Verify Plugin - run: ./gradlew runPluginVerifier -Pplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }} + name: "${{ steps.properties.outputs.name }} - ${{ steps.properties.outputs.version }}" + path: ./build/distributions/* # 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 if: github.event_name != 'pull_request' - needs: [build, verify] + needs: build runs-on: ubuntu-latest steps: @@ -218,38 +159,16 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - curl -H "Authorization: Bearer $GITHUB_TOKEN" https://api.github.com/repos/$GITHUB_REPOSITORY/releases \ - | tr '\r\n' ' ' \ - | jq '.[] | select(.draft == true) | .id' \ - | xargs -I '{}' \ - curl -X DELETE -H "Authorization: Bearer $GITHUB_TOKEN" https://api.github.com/repos/$GITHUB_REPOSITORY/releases/{} + 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 - name: Create Release Draft - id: createDraft - uses: actions/create-release@v1.1.4 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: v${{ needs.build.outputs.version }} - release_name: v${{ needs.build.outputs.version }} - body: ${{ needs.build.outputs.changelog }} - draft: true - - # Download plugin artifact provided by the previous job - - name: Download Artifact - uses: actions/download-artifact@v2 - with: - name: plugin-artifact - - # Upload artifact as a release asset - - name: Upload Release Asset - id: upload-release-asset - uses: actions/upload-release-asset@v1.0.2 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.createDraft.outputs.upload_url }} - asset_path: ./${{ needs.build.outputs.artifact }} - asset_name: ${{ needs.build.outputs.artifact }} - asset_content_type: application/zip + run: | + gh release create v${{ needs.build.outputs.version }} \ + --draft \ + --title "v${{ needs.build.outputs.version }}" \ + --notes "${{ needs.build.outputs.changelog }}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 90320b4..7ad6430 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,21 +14,28 @@ jobs: runs-on: ubuntu-latest steps: + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v2.3.4 + with: + ref: ${{ github.event.release.tag_name }} + # Setup Java 11 environment for the next steps - name: Setup Java uses: actions/setup-java@v2 with: distribution: zulu java-version: 11 - - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2.3.4 - with: - ref: ${{ github.event.release.tag_name }} + cache: gradle # Publish the plugin to the Marketplace - name: Publish Plugin env: PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }} - run: ./gradlew publishPlugin \ No newline at end of file + run: ./gradlew publishPlugin + + # Upload artifact as a release asset + - name: Upload Release Asset + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload ${{ github.event.release.tag_name }} ./build/distributions/* diff --git a/.github/workflows/run-ui-tests.yml b/.github/workflows/run-ui-tests.yml new file mode 100644 index 0000000..f549056 --- /dev/null +++ b/.github/workflows/run-ui-tests.yml @@ -0,0 +1,60 @@ +# GitHub Actions Workflow created for launching UI tests on Linux, Windows, and Mac in the following steps: +# - prepare and launch Idea with your plugin and robot-server plugin, which is need to interact with UI +# - wait for the Idea started +# - run UI tests with separate Gradle task +# +# Please check https://github.com/JetBrains/intellij-ui-test-robot for information about UI tests with IntelliJ IDEA. +# +# Workflow is triggered manually. + +name: Run UI Tests +on: + workflow_dispatch + +jobs: + + testUI: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + runIde: | + export DISPLAY=:99.0 + Xvfb -ac :99 -screen 0 1920x1080x16 & + gradle runIdeForUiTests & + - os: windows-latest + runIde: start gradlew.bat runIdeForUiTests + - os: macos-latest + runIde: ./gradlew runIdeForUiTests & + + steps: + + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v2.3.4 + + # Setup Java 11 environment for the next steps + - name: Setup Java + uses: actions/setup-java@v2 + with: + distribution: zulu + java-version: 11 + cache: gradle + + # Run IDEA prepared for UI testing + - name: Run IDE + run: ${{ matrix.runIde }} + + # Wait for IDEA to be started + - name: Health Check + uses: jtalk/url-health-check-action@v1.5 + with: + url: http://127.0.0.1:8082 + max-attempts: 15 + retry-delay: 30s + + # Run tests + - name: Tests + run: ./gradlew test diff --git a/.gitignore b/.gitignore index 6bfa1d7..f628ad3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea .run build +.qodana \ No newline at end of file diff --git a/.run/Run Plugin Tests.run.xml b/.run/Run Plugin Tests.run.xml index 03d0287..ae9ae13 100644 --- a/.run/Run Plugin Tests.run.xml +++ b/.run/Run Plugin Tests.run.xml @@ -11,7 +11,7 @@