publish.yml 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. name: Publish to npm
  2. on:
  3. release:
  4. types: [created]
  5. workflow_run:
  6. workflows: [CI]
  7. types: [completed]
  8. branches: [main]
  9. jobs:
  10. publish:
  11. runs-on: macos-latest
  12. if: >
  13. (github.event_name == 'release') ||
  14. (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push')
  15. steps:
  16. - name: Checkout repository
  17. uses: actions/checkout@v4
  18. - name: Setup Node.js
  19. uses: actions/setup-node@v4
  20. with:
  21. node-version: "22"
  22. registry-url: "https://registry.npmjs.org"
  23. cache: "npm"
  24. - name: Check if version is already published
  25. id: check
  26. run: |
  27. LOCAL_VERSION=$(node -p "require('./package.json').version")
  28. PUBLISHED_VERSION=$(npm view apple-mail-mcp version 2>/dev/null || echo "0.0.0")
  29. echo "local=$LOCAL_VERSION" >> "$GITHUB_OUTPUT"
  30. echo "published=$PUBLISHED_VERSION" >> "$GITHUB_OUTPUT"
  31. if [ "$LOCAL_VERSION" = "$PUBLISHED_VERSION" ]; then
  32. echo "skip=true" >> "$GITHUB_OUTPUT"
  33. else
  34. echo "skip=false" >> "$GITHUB_OUTPUT"
  35. fi
  36. - name: Install dependencies
  37. if: steps.check.outputs.skip == 'false'
  38. run: npm ci
  39. - name: Run linter
  40. if: steps.check.outputs.skip == 'false'
  41. run: npm run lint
  42. - name: Run tests
  43. if: steps.check.outputs.skip == 'false'
  44. run: npm test
  45. - name: Build
  46. if: steps.check.outputs.skip == 'false'
  47. run: npm run build
  48. - name: Publish to npm
  49. if: steps.check.outputs.skip == 'false'
  50. run: npm publish
  51. env:
  52. NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
  53. - name: Skip publish (version already published)
  54. if: steps.check.outputs.skip == 'true'
  55. run: echo "Version ${{ steps.check.outputs.local }} is already published. Skipping."