diff --git a/.github/workflows/ci.yml b/.github/workflows/build.yml similarity index 96% rename from .github/workflows/ci.yml rename to .github/workflows/build.yml index 88f3c06..657e1ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Continuous Integration +name: Build on: workflow_dispatch: diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml deleted file mode 100644 index 5c4bd8b..0000000 --- a/.github/workflows/check-dist.yml +++ /dev/null @@ -1,72 +0,0 @@ -# In TypeScript actions, `dist/` is a special directory. When you reference -# an action with the `uses:` property, `dist/index.js` is the code that will be -# run. For this project, the `dist/index.js` file is transpiled from other -# source files. This workflow ensures the `dist/` directory contains the -# expected transpiled code. -# -# If this workflow is run from a feature branch, it will act as an additional CI -# check and fail if the checked-in `dist/` directory does not match what is -# expected from the build. -name: Check Transpiled JavaScript - -on: - pull_request: - branches: - - main - push: - branches: - - main - -permissions: - contents: read - -jobs: - check-dist: - name: Check dist/ - runs-on: ubuntu-latest - - steps: - - name: Checkout - id: checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - id: setup-node - uses: actions/setup-node@v4 - with: - node-version-file: .node-version - cache: npm - - - name: Install Dependencies - id: install - run: npm ci - - - name: Build dist/ Directory - id: build - run: npm run bundle - - # This will fail the workflow if the `dist/` directory is different than - # expected. - - name: Compare Directories - id: diff - run: | - if [ ! -d dist/ ]; then - echo "Expected dist/ directory does not exist. See status below:" - ls -la ./ - exit 1 - fi - if [ "$(git diff --ignore-space-at-eol --text dist/ | wc -l)" -gt "0" ]; then - echo "Detected uncommitted changes after build. See status below:" - git diff --ignore-space-at-eol --text dist/ - exit 1 - fi - - # If `dist/` was different than expected, upload the expected version as a - # workflow artifact. - - if: ${{ failure() && steps.diff.outcome == 'failure' }} - name: Upload Artifact - id: upload - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist/ diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml new file mode 100644 index 0000000..6c91a77 --- /dev/null +++ b/.github/workflows/contributors.yml @@ -0,0 +1,11 @@ +name: Update Contributors + +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + +jobs: + contributors: + uses: CodingWithCalvin/.github/.github/workflows/contributors.yml@main + secrets: inherit diff --git a/.github/workflows/preview-changelog.yml b/.github/workflows/preview-changelog.yml new file mode 100644 index 0000000..91dac6e --- /dev/null +++ b/.github/workflows/preview-changelog.yml @@ -0,0 +1,27 @@ +name: Preview Changelog + +run-name: Preview release notes for next release + +on: + workflow_dispatch: + +jobs: + generate: + name: Generate + uses: CodingWithCalvin/.github/.github/workflows/generate-changelog.yml@main + secrets: inherit + + preview: + name: Display Preview + runs-on: ubuntu-latest + needs: generate + + steps: + - name: Display changelog preview + run: | + echo "==========================================" + echo "CHANGELOG PREVIEW" + echo "==========================================" + echo "" + echo "${{ needs.generate.outputs.changelog }}" + shell: bash diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..3218005 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,99 @@ +name: Publish + +on: + workflow_dispatch: + inputs: + version: + description: 'Version to release (e.g., 1.2.0)' + required: true + type: string + +jobs: + changelog: + uses: CodingWithCalvin/.github/.github/workflows/generate-changelog.yml@main + secrets: inherit + + release: + needs: changelog + runs-on: ubuntu-latest + outputs: + version: ${{ inputs.version }} + + permissions: + contents: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + + - name: Install Dependencies + run: npm ci + + - name: Rebuild dist + run: npm run bundle + + - name: Commit dist changes + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add dist/ + git diff --staged --quiet || git commit -m "chore: rebuild dist for v${{ inputs.version }}" + git push + + - name: Create and push tag + run: | + git tag v${{ inputs.version }} + git push origin v${{ inputs.version }} + + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: v${{ inputs.version }} + name: v${{ inputs.version }} + body: ${{ needs.changelog.outputs.changelog }} + + notify-bluesky: + needs: release + uses: CodingWithCalvin/.github/.github/workflows/bluesky-post.yml@main + with: + post_text: | + 🚀 JetBrains Marketplace Publisher v${{ needs.release.outputs.version }} has been released! + + Publish your JetBrains plugins to the marketplace with ease! + + [📋 Release Notes](https://github.com/${{ github.repository }}/releases/tag/v${{ needs.release.outputs.version }}) + [📦 GitHub Marketplace](https://github.com/marketplace/actions/jetbrains-marketplace-publisher) + + #github #githubactions #devops #automation + embed_url: https://github.com/marketplace/actions/jetbrains-marketplace-publisher + embed_title: JetBrains Marketplace Publisher + embed_description: Publish your JetBrains plugins to the marketplace with ease! + secrets: + BLUESKY_USERNAME: ${{ secrets.BLUESKY_USERNAME }} + BLUESKY_APP_PASSWORD: ${{ secrets.BLUESKY_APP_PASSWORD }} + + notify-linkedin: + needs: release + uses: CodingWithCalvin/.github/.github/workflows/linkedin-post.yml@main + with: + post_text: | + 🚀 JetBrains Marketplace Publisher v${{ needs.release.outputs.version }} has been released! + + Publish your JetBrains plugins to the marketplace with ease! + + 📋 Release Notes: https://github.com/${{ github.repository }}/releases/tag/v${{ needs.release.outputs.version }} + 📦 GitHub Marketplace: https://github.com/marketplace/actions/jetbrains-marketplace-publisher + + #github #githubactions #devops #automation + article_url: https://github.com/marketplace/actions/jetbrains-marketplace-publisher + article_title: JetBrains Marketplace Publisher + article_description: Publish your JetBrains plugins to the marketplace with ease! + secrets: + LINKEDIN_ACCESS_TOKEN: ${{ secrets.LINKEDIN_ACCESS_TOKEN }} + LINKEDIN_CLIENT_ID: ${{ secrets.LINKEDIN_CLIENT_ID }} diff --git a/README.md b/README.md index 4469a11..1ee5884 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,63 @@ -# CodingWithCalvin/GHA-JBMarketplacePublisher +# JetBrains Marketplace Publisher -Github Action to publish your JetBrains plugin to the marketplace +[![Build](https://img.shields.io/github/actions/workflow/status/CodingWithCalvin/GHA-JBMarketplacePublisher/build.yml?style=for-the-badge&label=Build)](https://github.com/CodingWithCalvin/GHA-JBMarketplacePublisher/actions/workflows/build.yml) +[![GitHub release](https://img.shields.io/github/v/release/CodingWithCalvin/GHA-JBMarketplacePublisher?style=for-the-badge)](https://github.com/CodingWithCalvin/GHA-JBMarketplacePublisher/releases) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE) -## Usage +🚀 Publish your JetBrains plugins to the marketplace with ease! -You can use the JB Marketplace Publish GitHub Action by configuring a YAML-based -workflow file, e.g. .github/workflows/deploy.yml. +This GitHub Action publishes your JetBrains plugin (ZIP archive) to the JetBrains Marketplace. -```yml +## 🚀 Usage + +You can use the JetBrains Marketplace Publisher GitHub Action by configuring a YAML-based workflow file, e.g. `.github/workflows/deploy.yml`. + +## 📥 Inputs + +| Input | Required | Description | +|-------|----------|-------------| +| `marketplace-pat` | Yes | Your Personal Access Token for the JetBrains Marketplace | +| `archive-path` | Yes | Path to the local ZIP package to publish | +| `plugin-id` | No* | Plugin ID from the JetBrains Marketplace URL | +| `plugin-xml-id` | No* | Unique identifier from the `` tag in plugin.xml | +| `channel` | No | Channel to publish to (default: `stable`) | +| `is-hidden` | No | Make the update hidden after approval (default: `false`) | + +> ⚠️ **Note:** One of `plugin-id` or `plugin-xml-id` is required, but not both. + +## 📋 Example + +```yaml steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: JetBrains Marketplace Publisher - uses: CodingWithCalvin/GHA-JBMarketplacePublisher@v1.0.0 + uses: CodingWithCalvin/GHA-JBMarketplacePublisher@v1 with: # REQUIRED - marketplace-pat: ${{ secrets.marketplace_pat }} - archive-path: ./src/outputFolder/extension.zip + marketplace-pat: ${{ secrets.JB_MARKETPLACE_PAT }} + archive-path: './src/outputFolder/plugin.zip' - # ONE OF THE FOLLOWING IS REQUIRED, BUT NOT BOTH + # ONE OF THE FOLLOWING IS REQUIRED plugin-id: 1000 - plugin-xml-id: '1001' + # OR + plugin-xml-id: 'com.example.myplugin' # OPTIONAL channel: stable is-hidden: false ``` -## Inputs +## 👥 Contributors + + + + +## 📄 License + +MIT License - see [LICENSE](LICENSE) for details. + +--- -| Input | Required | Description | -| --------------- | -------- | ---------------------------------------------------------------------------- | -| marketplace-pat | Y | Your 'Personal Access Token' to perform actions on the JetBrains Marketplace | -| archive-path | Y | Path to the local ZIP package you wish to publish | -| plugin-id | N | Your Plugin ID from the JetBrains Marketplace | -| plugin-xml-id | N | The unique identifier from the <id> tag of plugin.xml | -| channel | N | Channel to publish to (if omitted, defaults to "stable") | -| is-hidden | N | Make the update hidden (if omitted, defaults to false) | +Made with ❤️ by Coding With Calvin