GitHub Actions: Build workflow refactoring

This commit is contained in:
Jakub Chrzanowski 2023-06-14 13:40:51 +02:00 committed by Jakub Chrzanowski
parent 5fea6649ae
commit 18bc8c492d
2 changed files with 100 additions and 53 deletions

View File

@ -16,21 +16,20 @@ name: Build
on: 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: push:
branches: [main] branches: [ main ]
# Trigger the workflow on any pull request # Trigger the workflow on any pull request
pull_request: pull_request:
jobs: jobs:
# Run Gradle Wrapper Validation Action to verify the wrapper's checksum # Prepare environment and build the plugin
# Run verifyPlugin, IntelliJ Plugin Verifier, and test Gradle tasks
# Build plugin and provide the artifact for the next workflow jobs
build: build:
name: Build name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
version: ${{ steps.properties.outputs.version }} version: ${{ steps.properties.outputs.version }}
changelog: ${{ steps.properties.outputs.changelog }} changelog: ${{ steps.properties.outputs.changelog }}
pluginVerifierHomeDir: ${{ steps.properties.outputs.pluginVerifierHomeDir }}
steps: steps:
# Free GitHub Actions Environment Disk Space # Free GitHub Actions Environment Disk Space
@ -48,13 +47,9 @@ jobs:
- name: Gradle Wrapper Validation - name: Gradle Wrapper Validation
uses: gradle/wrapper-validation-action@v1.0.6 uses: gradle/wrapper-validation-action@v1.0.6
# Setup Java environment for the next steps # Setup Gradle
- name: Setup Java - name: Setup Gradle
uses: actions/setup-java@v3 uses: gradle/gradle-build-action@v2
with:
distribution: zulu
java-version: 17
cache: gradle
# Set environment variables # Set environment variables
- name: Export Properties - name: Export Properties
@ -76,46 +71,9 @@ jobs:
./gradlew listProductsReleases # prepare list of IDEs for Plugin Verifier ./gradlew listProductsReleases # prepare list of IDEs for Plugin Verifier
# Run tests # Build plugin
- name: Run Tests - name: Build plugin
run: ./gradlew check run: ./gradlew buildPlugin
# Collect Tests Result of failed tests
- name: Collect Tests Result
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: tests-result
path: ${{ github.workspace }}/build/reports/tests
# Upload Kover report to CodeCov
- name: Upload Code Coverage Report
uses: codecov/codecov-action@v3
with:
files: ${{ github.workspace }}/build/reports/kover/xml/report.xml
# Cache Plugin Verifier IDEs
- name: Setup Plugin Verifier IDEs Cache
uses: actions/cache@v3
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 -Dplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }}
# Collect Plugin Verifier Result
- name: Collect Plugin Verifier Result
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: pluginVerifier-result
path: ${{ github.workspace }}/build/reports/pluginVerifier
# Run Qodana inspections
- name: Qodana - Code Inspection
uses: JetBrains/qodana-action@v2023.1.4
# Prepare plugin archive content for creating artifact # Prepare plugin archive content for creating artifact
- name: Prepare Plugin Artifact - name: Prepare Plugin Artifact
@ -135,12 +93,100 @@ jobs:
name: ${{ steps.artifact.outputs.filename }} name: ${{ steps.artifact.outputs.filename }}
path: ./build/distributions/content/*/* path: ./build/distributions/content/*/*
# Run tests and upload a code coverage report
test:
name: Test
needs: build
runs-on: ubuntu-latest
steps:
# Check out current repository
- name: Fetch Sources
uses: actions/checkout@v3
# Setup Gradle
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
# Run tests
- name: Run Tests
run: ./gradlew check
# Collect Tests Result of failed tests
- name: Collect Tests Result
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: tests-result
path: ${{ github.workspace }}/build/reports/tests
# Upload Kover report to CodeCov
- name: Upload Code Coverage Report
uses: codecov/codecov-action@v3
with:
files: ${{ github.workspace }}/build/reports/kover/xml/report.xml
# Run plugin structure verification along with IntelliJ Plugin Verifier
verify:
name: Verify plugin
needs: build
runs-on: ubuntu-latest
steps:
# Check out current repository
- name: Fetch Sources
uses: actions/checkout@v3
# Setup Gradle
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
# Cache Plugin Verifier IDEs
- name: Setup Plugin Verifier IDEs Cache
uses: actions/cache@v3
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@v3
with:
name: pluginVerifier-result
path: ${{ github.workspace }}/build/reports/pluginVerifier
# Run Qodana inspections and provide report
inspectCode:
name: Inspect code
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
checks: write
pull-requests: write
steps:
# Check out current repository
- name: Fetch Sources
uses: actions/checkout@v3
# Run Qodana inspections
- name: Qodana - Code Inspection
uses: JetBrains/qodana-action@v2023.1.4
with:
cache-default-branch-only: true
# Prepare a draft release for GitHub Releases page for the manual verification # Prepare a draft release for GitHub Releases page for the manual verification
# If accepted and published, release workflow would be triggered # If accepted and published, release workflow would be triggered
releaseDraft: releaseDraft:
name: Release Draft name: Release draft
if: github.event_name != 'pull_request' if: github.event_name != 'pull_request'
needs: build needs: [ build, test, verify, inspectCode ]
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write

View File

@ -5,6 +5,7 @@
## [Unreleased] ## [Unreleased]
### Changed ### Changed
- GitHub Actions: Build workflow refactoring
- Dependencies (GitHub Actions) - upgrade `JetBrains/qodana-action` to `v2023.1.4` - Dependencies (GitHub Actions) - upgrade `JetBrains/qodana-action` to `v2023.1.4`
### Fixed ### Fixed