ci.yml 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. name: CI
  2. on:
  3. push:
  4. branches: [master, main]
  5. pull_request:
  6. branches: [master, main]
  7. jobs:
  8. build-and-test:
  9. runs-on: ${{ matrix.os }}
  10. strategy:
  11. fail-fast: false
  12. matrix:
  13. os: [ubuntu-latest, windows-latest]
  14. node-version: [20, 22]
  15. steps:
  16. - uses: actions/checkout@v4
  17. - uses: pnpm/action-setup@v4
  18. with:
  19. version: 9
  20. - uses: actions/setup-node@v4
  21. with:
  22. node-version: ${{ matrix.node-version }}
  23. cache: pnpm
  24. - run: pnpm install --frozen-lockfile
  25. - run: pnpm build
  26. - run: pnpm test
  27. verify-pack:
  28. runs-on: ubuntu-latest
  29. needs: build-and-test
  30. steps:
  31. - uses: actions/checkout@v4
  32. - uses: pnpm/action-setup@v4
  33. with:
  34. version: 9
  35. - uses: actions/setup-node@v4
  36. with:
  37. node-version: 22
  38. cache: pnpm
  39. - run: pnpm install --frozen-lockfile
  40. - run: pnpm build
  41. - name: Rewrite package versions for CI pack verification
  42. run: |
  43. set -euo pipefail
  44. CI_PACK_VERSION="0.0.0-ci.${GITHUB_RUN_ID}.${GITHUB_RUN_ATTEMPT}"
  45. node scripts/set-package-versions.mjs "$CI_PACK_VERSION" --root .
  46. echo "CI_PACK_VERSION=$CI_PACK_VERSION" >> "$GITHUB_ENV"
  47. - name: Verify CI-only tarballs
  48. run: |
  49. set -euo pipefail
  50. for pkg in packages/core packages/studio packages/cli; do
  51. echo "--- Checking $pkg ---"
  52. cd "$pkg"
  53. PACKDIR=$(mktemp -d)
  54. npm pack --pack-destination "$PACKDIR" 2>/dev/null
  55. TGZ=$(ls "$PACKDIR"/*.tgz)
  56. PACKED_PKG=$(tar -xOf "$TGZ" package/package.json)
  57. PACKED_VERSION=$(printf '%s' "$PACKED_PKG" | node -pe "JSON.parse(require('fs').readFileSync(0, 'utf8')).version")
  58. if [ "$PACKED_VERSION" != "$CI_PACK_VERSION" ]; then
  59. echo "FAIL: $pkg tarball version is $PACKED_VERSION, expected CI-only $CI_PACK_VERSION"
  60. rm -rf "$PACKDIR"
  61. exit 1
  62. fi
  63. if echo "$PACKED_PKG" | grep -q '"workspace:'; then
  64. echo "FAIL: $pkg tarball still contains workspace: protocol"
  65. echo "$PACKED_PKG" | grep 'workspace:'
  66. rm -rf "$PACKDIR"
  67. exit 1
  68. fi
  69. echo "OK: $pkg tarball is CI-only and clean"
  70. rm -rf "$PACKDIR"
  71. cd - >/dev/null
  72. done