From b7785a3c26ebc06f95739099b36e5559ffa8c949 Mon Sep 17 00:00:00 2001 From: Jakub Chrzanowski Date: Thu, 26 Aug 2021 16:48:38 +0200 Subject: [PATCH] GitHub Actions: update Build and Release flows --- .github/workflows/build.yml | 129 +++++++++------------------------- .github/workflows/release.yml | 76 +++++++++++--------- CHANGELOG.md | 8 +-- build.gradle.kts | 8 ++- 4 files changed, 86 insertions(+), 135 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87669ff..0c051cc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,6 +69,24 @@ jobs: 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 tests - name: Run Tests run: ./gradlew test @@ -77,6 +95,10 @@ jobs: - 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,10 +106,8 @@ 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: # Setup Java 11 environment for the next steps @@ -127,85 +147,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 + # 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 +181,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 cb7f5d9..16dce77 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,46 +27,56 @@ jobs: with: ref: ${{ github.event.release.tag_name }} + # 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') }} + + # Update Unreleased section with the current release note + - name: Patch Changelog + run: | + ./gradlew patchChangelog --release-note="`cat << EOM + ${{ github.event.release.body }} + EOM`" + # Publish the plugin to the Marketplace - name: Publish Plugin env: PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }} run: ./gradlew publishPlugin - # Patch changelog, commit and push to the current repository - changelog: - name: Update Changelog - needs: release - 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 + # 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/* - # Check out current repository - - name: Fetch Sources - uses: actions/checkout@v2.3.4 - with: - ref: ${{ github.event.release.tag_name }} + # Create pull request + - name: Create Pull Request + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION="${{ github.event.release.tag_name }}" + BRANCH="changelog-update-$VERSION" - # Update Unreleased section with the current version - - name: Patch Changelog - run: ./gradlew patchChangelog + git config user.email "action@github.com" + git config user.name "GitHub Action" - # Commit patched Changelog - - name: Commit files - run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" - git commit -m "Update changelog" -a + git checkout -b $BRANCH + git commit -am "Changelog update - $VERSION" + git push --set-upstream origin $BRANCH - # Push changes - - name: Push changes - uses: ad-m/github-push-action@master - with: - branch: main - github_token: ${{ secrets.GITHUB_TOKEN }} + gh pr create \ + --title "Changelog update - \`$VERSION\`" \ + --body "Current pull request contains patched \`CHANGELOG.md\` file for the \`$VERSION\` version." \ + --base main \ + --head $BRANCH diff --git a/CHANGELOG.md b/CHANGELOG.md index 327858d..db3ab25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Changed - GitHub Actions: Use Java 11 +- GitHub Actions: update Build and Release flows - Update `pluginVerifierIdeVersions` to `2020.3.4, 2021.1.3, 2021.2` - Change since/until build to `203-212.*` - Upgrade Gradle Wrapper to `7.2` @@ -207,15 +208,10 @@ - Gradle - remove kotlin("stdlib-jdk8") dependency to decrease the plugin artifact size - Dependencies - bump ktlint to `9.3.0` - GitHub Actions - make *Update Changelog* job dependent on the *Publish Plugin* - -### Fixed -- Resolve ktlint reports - -## [0.3.1] -### Changed - GitHub Actions - run plugin verifier against `2019.3` `2020.1` `2020.2` ### Fixed +- Resolve ktlint reports - GitHub Actions - Plugin Verifier broken for artifacts with whitespaces in name ## [0.3.0] diff --git a/build.gradle.kts b/build.gradle.kts index e7ab286..afb272e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,7 +11,7 @@ plugins { // gradle-intellij-plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin id("org.jetbrains.intellij") version "1.1.4" // gradle-changelog-plugin - read more: https://github.com/JetBrains/gradle-changelog-plugin - id("org.jetbrains.changelog") version "1.2.1" + id("org.jetbrains.changelog") version "1.3.0" } group = properties("pluginGroup") @@ -77,7 +77,11 @@ tasks { ) // Get the latest available change notes from the changelog file - changeNotes.set(provider { changelog.getLatest().toHTML() }) + changeNotes.set(provider { + changelog.run { + getOrNull(properties("pluginVersion")) ?: getLatest() + }.toHTML() + }) } runPluginVerifier {