diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..e003d52e3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,119 @@ +name: Release Plugin + +#Only one job at a time +concurrency: release + +on: + workflow_dispatch: + inputs: + publishToMarketPlace: + description: 'Publish to JetBrains Marketplace ?' + required: true + type: choice + options: + - 'true' + - 'false' + default: 'false' + +jobs: + # Prepare and publish the plugin to JetBrains Marketplace repository + release: + if: ${{ inputs.publishToMarketPlace == 'true' }} + name: Publish to Marketplace + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + # Check out current repository + - name: Fetch Sources + uses: actions/checkout@v4 + + # Validate Wrapper before running build + - name: validate Gradle Wrapper + uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 #v1.1.0 + + # Set up Java environment for the next steps + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + + # Setup Gradle + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-home-cache-cleanup: true + + - name: Set Release Version + id: release_version + shell: bash + run: | + CURRENT_VERSION=$(grep "projectVersion=" gradle.properties | cut -d'=' -f2) + NEW_VERSION=${CURRENT_VERSION%-SNAPSHOT} + awk -v current="$CURRENT_VERSION" -v new="$NEW_VERSION" 'BEGIN {FS=OFS="="} $1 == "projectVersion" { $2 = new }1' gradle.properties > tmpfile && mv tmpfile gradle.properties + echo "Release version: $NEW_VERSION" + echo "PLUGIN_VERSION=${NEW_VERSION}" >> $GITHUB_ENV + + # Publish the plugin to JetBrains Marketplace + - name: Publish Plugin to JetBrains Marketplace + env: + PUBLISH_TOKEN: ${{ secrets.JETBRAINS_MARKETPLACE_TOKEN }} + run: | + ./gradlew publishPlugin -PjetBrainsToken=$PUBLISH_TOKEN -PprojectVersion=$PLUGIN_VERSION -PjetBrainsChannel=stable + echo "Published $PLUGIN_VERSION to the Jetbrains Marketplace" + + - name: Tag Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.email "action@github.com" + git config user.name "GitHub Action" + if git diff --quiet; then + echo "No changes to commit." + else + git commit -sam "chore(skip-release): set version to $PLUGIN_VERSION" + fi + git tag $PLUGIN_VERSION + git push origin $PLUGIN_VERSION + + # Set next SNAPSHOT version + - name: Increment Plugin Version + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + CURRENT_VERSION=$(grep "projectVersion=" gradle.properties | cut -d'=' -f2) + IFS="-" read -ra VERSION_PARTS <<< "$CURRENT_VERSION" + IFS="." read -ra VERSION_NUM <<< "${VERSION_PARTS[0]}" + ((VERSION_NUM[2]++)) + NEW_VERSION="${VERSION_NUM[0]}.${VERSION_NUM[1]}.${VERSION_NUM[2]}-SNAPSHOT" + awk -v new_version="$NEW_VERSION" '/projectVersion=/{sub(/=.*/, "=" new_version)}1' gradle.properties > tmpfile && mv tmpfile gradle.properties + echo "Set $NEW_VERSION in gradle.properties" + git commit -sam "chore(skip-release): set version to $NEW_VERSION" + git push origin main + + - name: Simple conventional changelog + uses: lstocchi/simple-conventional-changelog@13071c09073f5deddf03d44d9af6a8b0f81ef227 #0.0.11 + id: changelog + with: + token: ${{ secrets.GITHUB_TOKEN }} + current-tag: ${{env.PLUGIN_VERSION}} + types-mapping: 'feat:Features,fix:Bug Fixes,docs:Documentation,refactor:Refactoring,build:Builds,chore:Other' + + # Create a new Github release + - name: Create Github Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create ${PLUGIN_VERSION} \ + --title "${PLUGIN_VERSION}" \ + --notes "$(cat << 'EOM' + ${{ steps.changelog.outputs.changelog }} + EOM + )" + + - name: Upload Release Asset + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release upload ${PLUGIN_VERSION} ./build/distributions/*