From a5019278befc7fc8e91bf4fb98692cff99fffcd6 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 22:08:40 +0200 Subject: [PATCH 01/13] build: support for changelog - initial changelog file. - gradle plugin to automatically manage the changelog (ex: replacing unreleased tag with an actual version at release time) --- CHANGELOG.md | 8 ++++++++ build.gradle.kts | 15 ++++++++++++--- gradle.properties | 2 ++ gradle/libs.versions.toml | 4 +++- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 gradle.properties diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6867b6f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +# Coder Toolbox Plugin Changelog + +## Unreleased + +### Added + +- initial support for JetBrains Toolbox 2.6.0.38311 with the possibility to manage the workspaces - i.e. start, stop, + update and delete actions and also quick shortcuts to templates, web terminal and dashboard. \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 4c89011..914beb2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ plugins { alias(libs.plugins.dependency.license.report) alias(libs.plugins.ksp) alias(libs.plugins.gradle.wrapper) + alias(libs.plugins.changelog) } buildscript { @@ -50,6 +51,15 @@ dependencies { testImplementation(kotlin("test")) } +val pluginId = properties("group") +val pluginVersion = properties("version") + +changelog { + version.set(pluginVersion) + groups.set(emptyList()) + title.set("Coder Toolbox Plugin Changelog") +} + licenseReport { renderers = arrayOf(JsonReportRenderer("dependencies.json")) filters = arrayOf(ExcludeTransitiveDependenciesFilter()) @@ -65,9 +75,6 @@ tasks.test { useJUnitPlatform() } -val pluginId = "com.coder.toolbox" -val pluginVersion = "0.0.1" - val assemblePlugin by tasks.registering(Jar::class) { archiveBaseName.set(pluginId) from(sourceSets.main.get().output) @@ -163,3 +170,5 @@ tasks.register("classpath") { ) } } + +fun properties(key: String) = project.findProperty(key).toString() \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..2ff1126 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +version=0.1.0 +group=com.coder.toolbox diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc96a97..00bb2c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,6 +12,7 @@ exec = "1.12" moshi = "1.15.1" ksp = "2.1.0-1.0.29" retrofit = "2.8.2" +changelog = "2.2.1" [libraries] toolbox-core-api = { module = "com.jetbrains.toolbox:core-api", version.ref = "toolbox-plugin-api" } @@ -40,4 +41,5 @@ kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } dependency-license-report = { id = "com.github.jk1.dependency-license-report", version.ref = "dependency-license-report" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp"} -gradle-wrapper = { id = "me.filippov.gradle.jvm.wrapper", version.ref = "gradle-wrapper" } \ No newline at end of file +gradle-wrapper = { id = "me.filippov.gradle.jvm.wrapper", version.ref = "gradle-wrapper" } +changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } \ No newline at end of file From 8e23671fbe7195ae2ad29ad3868650074859f742 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 22:12:45 +0200 Subject: [PATCH 02/13] chore: update .gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ba33143..01b3214 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,7 @@ build jvm/ # IntelliJ IDEA -.idea \ No newline at end of file +.idea + +# hidden macOS metadata files +.DS_Store From 5d80bdea35439c2ad8b62b4bf12acc605cd12296 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 22:45:17 +0200 Subject: [PATCH 03/13] build: github workflow to build, run tests and publish release draft - builds the zip and runs the unit tests --- .github/workflows/build.yml | 132 ++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0934bb9 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,132 @@ +# GitHub Actions workflow for testing and preparing the plugin release. +# GitHub Actions reference: https://help.github.com/en/actions + +name: Coder Toolbox Plugin Build + +on: + push: + branches: + - main + pull_request: + +jobs: + # Run plugin tests on every supported platform. + test: + strategy: + matrix: + platform: + - ubuntu-latest + - macos-latest + - windows-latest + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4.2.2 + + - uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 21 + cache: gradle + + - uses: gradle/wrapper-validation-action@v3.5.0 + + # Run tests + - run: ./gradlew test --info + + # Collect Tests Result of failed tests + - if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: tests-result + path: ${{ github.workspace }}/build/reports/tests + + build: + name: Build + needs: test + runs-on: ubuntu-latest + outputs: + version: ${{ steps.properties.outputs.version }} + changelog: ${{ steps.properties.outputs.changelog }} + steps: + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v4.2.2 + + # Setup Java 21 environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 21 + cache: gradle + + # Set environment variables + - name: Export Properties + id: properties + shell: bash + run: | + PROPERTIES="$(./gradlew properties --console=plain -q)" + VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" + NAME="$(echo "$PROPERTIES" | grep "^group:" | 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" + + # Run plugin build + - name: Run Build + run: ./gradlew clean buildZip --info + + # Prepare plugin archive content for creating artifact + - name: Prepare Plugin Artifact + id: artifact + shell: bash + run: | + cd ${{ github.workspace }}/build/distributions + FILENAME=`ls *.zip` + unzip "$FILENAME" -d content + echo "::set-output name=filename::${FILENAME:0:-4}" + # Store already-built plugin as an artifact for downloading + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.artifact.outputs.filename }} + path: ./build/distributions/content/*/* + + # 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 + runs-on: ubuntu-latest + steps: + + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v4.2.2 + + # Remove old release drafts by using the curl request for the available releases with draft flag + - name: Remove Old Release Drafts + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + 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 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create v${{ needs.build.outputs.version }} \ + --draft \ + --target ${GITHUB_REF_NAME} \ + --title "v${{ needs.build.outputs.version }}" \ + --notes "$(cat << 'EOM' + ${{ needs.build.outputs.changelog }} + EOM + )" From 27630845ae4178b63e1b045848e74faa399ffa9c Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 22:50:56 +0200 Subject: [PATCH 04/13] fix: name of gradle task to zip the plugin --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0934bb9..493733f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -78,7 +78,7 @@ jobs: # Run plugin build - name: Run Build - run: ./gradlew clean buildZip --info + run: ./gradlew clean pluginZip --info # Prepare plugin archive content for creating artifact - name: Prepare Plugin Artifact From 2b5708f6b7b687601b7041f008441dad215d711d Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 23:21:49 +0200 Subject: [PATCH 05/13] fix: plugin artefacts should go in a folder without version - jar artefacts should be grouped under a folder whose name acts as a plugin id, which means the version should not be present in the name. - with this patch we differentiate between plugin name (root folder) and plugin id (second level folder) --- build.gradle.kts | 4 +++- gradle.properties | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 914beb2..018240e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,6 +52,7 @@ dependencies { } val pluginId = properties("group") +val pluginName = properties("name") val pluginVersion = properties("version") changelog { @@ -145,7 +146,8 @@ val pluginZip by tasks.creating(Zip::class) { include("icon.svg") rename("icon.svg", "pluginIcon.svg") } - archiveBaseName.set("$pluginId-$pluginVersion") + into(pluginId) + archiveBaseName.set(pluginName) } val uploadPlugin by tasks.creating { diff --git a/gradle.properties b/gradle.properties index 2ff1126..77308ba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,3 @@ version=0.1.0 group=com.coder.toolbox +name=coder-toolbox From 7cfd5af5f8001be06dea3bcf124242724d327c63 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 23:35:24 +0200 Subject: [PATCH 06/13] impl: workflow actions for release - patch unreleased section in the changelog with version and release date - publish the plugin to the marketplace (disabled for now) - promote draft artefact as released --- .github/workflows/release.yml | 91 +++++++++++++++++++++++++++++++++++ build.gradle.kts | 7 ++- 2 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2a262db --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,91 @@ +# GitHub Actions Workflow created for handling the release process based on the draft release prepared with the Build workflow. + +name: Release +on: + release: + types: [ prereleased, released ] + +jobs: + + # Prepare and publish the plugin to the Marketplace repository + release: + name: Publish Plugin + runs-on: ubuntu-latest + steps: + + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v4.2.2 + with: + ref: ${{ github.event.release.tag_name }} + + # Setup Java 21 environment for the next steps + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: zulu + java-version: 21 + cache: gradle + + # Set environment variables + - name: Export Properties + id: properties + shell: bash + run: | + CHANGELOG="$(cat << 'EOM' | sed -e 's/^[[:space:]]*$//g' -e '/./,$!d' + ${{ github.event.release.body }} + EOM + )" + + CHANGELOG="${CHANGELOG//'%'/'%25'}" + CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" + CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" + + echo "::set-output name=changelog::$CHANGELOG" + + # Update Unreleased section with the current release note + - name: Patch Changelog + if: ${{ steps.properties.outputs.changelog != '' }} + env: + CHANGELOG: ${{ steps.properties.outputs.changelog }} + run: | + ./gradlew patchChangelog --release-note="$CHANGELOG" + + # Publish the plugin to the Marketplace + # TODO - enable this step (by removing the `if` block) when JetBrains is clear about release procedures + - name: Publish Plugin + if: false + env: + PUBLISH_TOKEN: ${{ secrets.PUBLISH_TOKEN }} + CERTIFICATE_CHAIN: ${{ secrets.CERTIFICATE_CHAIN }} + PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} + PRIVATE_KEY_PASSWORD: ${{ secrets.PRIVATE_KEY_PASSWORD }} + run: ./gradlew publishPlugin --info + + # 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/* + + # Create pull request + - name: Create Pull Request + if: ${{ steps.properties.outputs.changelog != '' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + VERSION="${{ github.event.release.tag_name }}" + BRANCH="changelog-update-$VERSION" + + git config user.email "action@github.com" + git config user.name "GitHub Action" + + git checkout -b $BRANCH + git commit -am "Changelog update - $VERSION" + git push --set-upstream origin $BRANCH + + gh pr create \ + --title "Changelog update - \`$VERSION\`" \ + --body "Current pull request contains patched \`CHANGELOG.md\` file for the \`$VERSION\` version." \ + --base main \ + --head $BRANCH \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 018240e..14c1203 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -150,11 +150,14 @@ val pluginZip by tasks.creating(Zip::class) { archiveBaseName.set(pluginName) } -val uploadPlugin by tasks.creating { +val publishPlugin by tasks.creating { dependsOn(pluginZip) doLast { - val instance = PluginRepositoryFactory.create("https://plugins.jetbrains.com", project.property("pluginMarketplaceToken").toString()) + val instance = PluginRepositoryFactory.create( + "https://plugins.jetbrains.com", + project.property("PUBLISH_TOKEN").toString() + ) // first upload // instance.uploader.uploadNewPlugin(pluginZip.outputs.files.singleFile, listOf("toolbox", "gateway"), LicenseUrl.APACHE_2_0, ProductFamily.TOOLBOX) From b94bee62673383bcdddbd932820b618b7a5a383d Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Feb 2025 23:54:35 +0200 Subject: [PATCH 07/13] impl: initial version for dependabot - upgrades gradle dependencies and plugins - upgrades github actions - runs weekly --- .github/dependabot.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4cb1368 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +# Dependabot configuration: +# https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + # Maintain dependencies for Gradle dependencies + - package-ecosystem: "gradle" + directory: "/" + target-branch: "main" + schedule: + interval: "weekly" + time: "06:00" + timezone: "America/Chicago" + commit-message: + prefix: "chore" + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + target-branch: "main" + schedule: + interval: "weekly" + time: "06:00" + timezone: "America/Chicago" + commit-message: + prefix: "chore" \ No newline at end of file From 439750d0987ba2d23d4a60296cff3d23e8b45a3b Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Sat, 1 Mar 2025 00:04:13 +0200 Subject: [PATCH 08/13] fix: skip some of the dependencies from automatic upgrade - kotlin and serialization plugins depend on the minimum targeted Toolbox version --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4cb1368..6db3a41 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,15 @@ updates: interval: "weekly" time: "06:00" timezone: "America/Chicago" + ignore: + # these depend on the toolbox API and should be updated manually + - dependency-name: "org.jetbrains.kotlin.jvm" + - dependency-name: "org.jetbrains.kotlin.plugin.serialization" + - dependency-name: "com.google.devtools.ksp" + # these can have breaking changes + - dependency-name: "com.jetbrains.toolbox:core-api" + - dependency-name: "com.jetbrains.toolbox:ui-api" + - dependency-name: "com.jetbrains.toolbox:remote-dev-api" commit-message: prefix: "chore" # Maintain dependencies for GitHub Actions From c9f3bce82675c408307a9e878cc8b13320eec989 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Mon, 3 Mar 2025 22:23:18 +0200 Subject: [PATCH 09/13] fix: include compile dependencies when building the zip --- build.gradle.kts | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 14c1203..a541a15 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -83,7 +83,12 @@ val assemblePlugin by tasks.registering(Jar::class) { val copyPlugin by tasks.creating(Sync::class.java) { dependsOn(assemblePlugin) + fromCompileDependencies() + into(getPluginInstallDir()) +} + +fun CopySpec.fromCompileDependencies() { from(assemblePlugin.get().outputs.files) from("src/main/resources") { include("extension.json") @@ -105,8 +110,14 @@ val copyPlugin by tasks.creating(Sync::class.java) { } }, ) +} - into(getPluginInstallDir()) +val pluginZip by tasks.creating(Zip::class) { + dependsOn(assemblePlugin) + + fromCompileDependencies() + into(pluginId) + archiveBaseName.set(pluginName) } tasks.register("cleanAll", Delete::class.java) { @@ -134,22 +145,6 @@ private fun getPluginInstallDir(): Path { return pluginsDir / pluginId } -val pluginZip by tasks.creating(Zip::class) { - dependsOn(assemblePlugin) - - from(assemblePlugin.get().outputs.files) - from("src/main/resources") { - include("extension.json") - include("dependencies.json") - } - from("src/main/resources") { - include("icon.svg") - rename("icon.svg", "pluginIcon.svg") - } - into(pluginId) - archiveBaseName.set(pluginName) -} - val publishPlugin by tasks.creating { dependsOn(pluginZip) From ed8a82af4f8ea41ab369127886e5c0f27b58c16b Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Mon, 3 Mar 2025 22:57:11 +0200 Subject: [PATCH 10/13] fix: use $GITHUB_OUTPUT to set step parameters - set-output is deprecated --- .github/workflows/build.yml | 9 +++++---- .github/workflows/release.yml | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 493733f..fb158b7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -72,9 +72,9 @@ jobs: 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 "version=$VERSION" >> $GITHUB_OUTPUT + echo "name=$NAME" >> $GITHUB_OUTPUT + echo "changelog=$CHANGELOG" >> $GITHUB_OUTPUT # Run plugin build - name: Run Build @@ -88,7 +88,8 @@ jobs: cd ${{ github.workspace }}/build/distributions 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@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a262db..7eccb36 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,7 +41,7 @@ jobs: CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" - echo "::set-output name=changelog::$CHANGELOG" + echo "changelog=$CHANGELOG" >> $GITHUB_OUTPUT # Update Unreleased section with the current release note - name: Patch Changelog From a0d595926fa7ab8848445c08a2467d03e32219bc Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Mon, 3 Mar 2025 23:32:29 +0200 Subject: [PATCH 11/13] fix: use github workflow context properties - github.repository instead of the {owner}/{repo} --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fb158b7..95309c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -110,14 +110,15 @@ jobs: - name: Fetch Sources uses: actions/checkout@v4.2.2 - # Remove old release drafts by using the curl request for the available releases with draft flag + # Remove old release drafts by using GitHub CLI - name: Remove Old Release Drafts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh api repos/{owner}/{repo}/releases \ + gh api repos/${{ github.repository }}/releases \ --jq '.[] | select(.draft == true) | .id' \ - | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{} + | xargs -I '{}' gh api -X DELETE repos/${{ github.repository }}/releases/{} + # Create new release draft - which is not publicly visible and requires manual acceptance - name: Create Release Draft env: From 376bdf514e3ca1dcfc299ff0d7b4c814d541d00f Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Mon, 3 Mar 2025 23:37:48 +0200 Subject: [PATCH 12/13] fix: use modern bash command substitution - backticks command substitution is deprecated --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95309c3..2275e87 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,7 +86,7 @@ jobs: shell: bash run: | cd ${{ github.workspace }}/build/distributions - FILENAME=`ls *.zip` + FILENAME=$(ls *.zip) unzip "$FILENAME" -d content echo "filename=${FILENAME:0:-4}" >> $GITHUB_OUTPUT From 9f9ac77c3a3427bcc862980279603e7609de6018 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Tue, 4 Mar 2025 00:15:51 +0200 Subject: [PATCH 13/13] fix: ensure changelog multiline output doesn't break - by saving the content into an intermediate file --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2275e87..70187f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -124,11 +124,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + echo "${{ needs.build.outputs.changelog }}" > RELEASE_NOTES.md gh release create v${{ needs.build.outputs.version }} \ --draft \ --target ${GITHUB_REF_NAME} \ --title "v${{ needs.build.outputs.version }}" \ - --notes "$(cat << 'EOM' - ${{ needs.build.outputs.changelog }} - EOM - )" + --notes-file RELEASE_NOTES.md