diff --git a/.github/workflows/auto-changeset.yml b/.github/workflows/auto-changeset.yml new file mode 100644 index 00000000000..9a164c3eaa7 --- /dev/null +++ b/.github/workflows/auto-changeset.yml @@ -0,0 +1,72 @@ +name: Add changeset automatically + +on: + pull_request_target: + types: + - opened + - edited + +jobs: + auto-changeset: + if: | + startsWith(github.repository, 'asyncapi/') && + ( startsWith(github.event.pull_request.title, 'fix:') || + startsWith(github.event.pull_request.title, 'feat:') || + startsWith(github.event.pull_request.title, 'fix!:') || + startsWith(github.event.pull_request.title, 'feat!:') + ) + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_TOKEN }} + + - name: Checkout PR + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + run: gh pr checkout ${{ github.event.pull_request.number }} + + - name: Determine release type + id: determine_release_type + uses: actions/github-script@v7 + with: + script: | + const title = context.payload.pull_request.title; + const releaseType = title.split(':')[0]; + switch (releaseType) { + case 'fix': + return 'patch'; + case 'feat': + return 'minor'; + case 'fix!': + return 'major'; + case 'feat!': + return 'major'; + default: + return 'patch'; + } + + - name: Create changeset file + run: "echo -e '---\n'@asyncapi/cli': ${{ steps.determine_release_type.outputs.result }}\n---\n\n ${{ github.event.pull_request.title }}\n' > .changeset/${{ github.event.pull_request.number }}.md" + + - name: Commit changeset file + run: | + git config --global user.name asyncapi-bot + git config --global user.email info@asyncapi.io + git add .changeset/${{ github.event.pull_request.number }}.md + git commit -m "chore: add changeset for PR #${{ github.event.pull_request.number }}" + + - name: Push changeset file + run: git push https://${{ secrets.GH_TOKEN }}@github.com/${{ github.event.pull_request.head.repo.full_name }} HEAD:${{ github.event.pull_request.head.ref }} + + # Only, on failure, send a message on the 94_bot-failing-ci slack channel + - if: failure() + name: Report workflow run status to Slack + uses: 8398a7/action-slack@fbd6aa58ba854a740e11a35d0df80cb5d12101d8 #using https://github.com/8398a7/action-slack/releases/tag/v3.15.1 + with: + status: ${{ job.status }} + fields: repo,action,workflow + text: 'AsyncAPI CLI release to Chocolatey failed' + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} \ No newline at end of file